-2

有没有一种方法可以“重置”函数 std::string::find 以再次查看字符串的开头,类似于在 i/o 流中设置文件指针?谢谢。

4

2 回答 2

8

你的假设是错误的。find始终查找第一个匹配项(或指定起始索引后的第一个匹配项)

std::string str("Hello");

size_t x = str.find("l");
assert(x==2);

x = str.find("l");
assert(x==2);

要查找下一个匹配项,您必须指定一个开始位置:

x = str.find("l",x+1);  //previous x was 2
assert(x==3);

x = str.find("l",x+1); //now x is 3, no subsequent 'l' found
assert(x==std::string::npos);
于 2013-06-26T22:15:38.607 回答
3

实际上find搜索给定索引之后的第一个匹配项。这是默认原型:

size_t find (const string& str, size_t pos = 0) const noexcept;

默认情况下,它开始查看字符串的索引 0,因此:

str.find(str2);

正在搜索 in 的第一次str2出现str。如果它没有找到任何东西,它会返回std::string::npos

您可以像这样使用该功能:

str.find(str2, 4);

它将从索引 4 开始搜索第一个出现的str2in 。如果字符串少于 4 个字符,它将再次返回。strstrstd::string::npos

于 2013-06-26T22:19:50.870 回答