我正在一个字符串中进行一系列搜索,并且在该行的某个地方将丢失一个字符串,并且我的搜索集应该会失败。

我原以为一旦位置达到 std::string::npos 它就会留在那里,但事实并非如此。将 std::string::npos 传递给 std::string.find 似乎又从头开始搜索

std::string str("frederick");
std::string::size_type pos = str.find("der",std::string::npos);
TS_ASSERT_EQUALS(pos, std::string::npos); // FAIL, 3 is returned

为什么不指示字符串的结尾?

更新:
意图是按顺序搜索一系列字符串,并在最后检查结果
pos = str.find(string1, pos)
pos = str.find(string2, pos)
pos = str.find(string3, pos)
if (pos != std:string::npos)
{ // All strings found

最佳答案

查看规范,我认为您的实现中可能存在错误。
basic_string::find 应该返回最低位置 xpos 使得 pos <= xposxpos + str.size() <= size()at(xpos + I) == str.at(I) 用于 I 控制的所有元素 str
basic_string::npos 被 -1 转换为无符号类型,因此必须是该无符号类型可表示的最大数。鉴于没有其他位置 xpos 可以满足甚至 npos xpos 的第一部分,并且 find 在失败时必须返回 npos,据我所知,当将 npos 作为第二个参数传递时,basic_string::findnpos 的唯一有效返回值。

关于c++ - 为什么 std::string.find(text,std::string:npos) 不返回 npos?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1011790/

10-11 16:04