public member function
<string>

std::basic_string::find

string (1)
size_type find (const basic_string& str, size_type pos = 0) const;
c-string (2)
size_type find (const charT* s, size_type pos = 0) const;
buffer (3)
size_type find (const charT* s, size_type pos, size_type n) const;
character (4)
size_type find (charT c, size_type pos = 0) const;
string (1)
size_type find (const basic_string& str, size_type pos = 0) const noexcept;
c-string (2)
size_type find (const charT* s, size_type pos = 0) const;
buffer (3)
size_type find (const charT* s, size_type pos, size_type n) const;
character (4)
size_type find (charT c, size_type pos = 0) const noexcept;
在字符串中查找首次出现
basic_string中搜索参数指定的序列首次出现的位置。

当指定pos时,搜索仅包括位置pos或之后的字符,忽略任何可能包含pos之前字符的匹配项。

该函数使用traits_type::eq来确定字符的等价性。

请注意,与成员find_first_of不同,当搜索多个字符时,仅匹配其中一个字符是不够的,整个序列必须匹配。

参数

str
另一个要搜索的basic_string
pos
搜索中要考虑的字符串中第一个字符的位置。
如果大于字符串长度,则该函数永远找不到匹配项。
注意:第一个字符用值表示0(不是1): A value of0表示搜索整个字符串。
s
指向字符数组的指针。
如果指定了参数n (3),则要匹配的序列是数组中的前n个字符。
否则(2),期望一个以 null 结尾的序列:要匹配的序列的长度由第一个 null 字符确定。
n
要匹配的字符序列的长度。
c
要搜索的单个字符。

charTbasic_string 的字符类型(即,它的第一个模板参数)。
成员类型size_type是一种无符号整型类型。

返回值

第一个匹配项的第一个字符的位置。
如果未找到匹配项,该函数将返回basic_string::npos

成员类型size_type是一种无符号整型类型。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// string::find
#include <iostream>
#include <string>

int main ()
{
  std::string str ("There are two needles in this haystack with needles.");
  std::string str2 ("needle");

  // different member versions of find in the same order as above:
  std::string::size_type found = str.find(str2);
  if (found!=std::string::npos)
    std::cout << "first 'needle' found at: " << found << '\n';

  found=str.find("needles are small",found+1,6);
  if (found!=std::string::npos)
    std::cout << "second 'needle' found at: " << found << '\n';

  found=str.find("haystack");
  if (found!=std::string::npos)
    std::cout << "'haystack' also found at: " << found << '\n';

  found=str.find('.');
  if (found!=std::string::npos)
    std::cout << "Period found at: " << found << '\n';

  // let's replace the first needle:
  str.replace(str.find(str2),str2.length(),"preposition");
  std::cout << str << '\n';

  return 0;
}

请注意如何使用参数pos来搜索同一搜索字符串的第二个实例。 输出
first 'needle' found at: 14
second 'needle' found at: 44
'haystack' also found at: 30
Period found at: 51
There are two prepositions in this haystack with needles.


复杂度

未指定,但通常与length()-pos乘以要匹配的序列的长度(最坏情况)。

迭代器有效性

没有变化。

数据竞争

该对象被访问。

异常安全

如果已知s未指向足够长的数组,会导致未定义行为
否则,该函数永远不会抛出异常(无抛出保证)。

另见