我正在一个字符串中进行一系列搜索,并且在该行的某个地方将丢失一个字符串,并且我的搜索集应该会失败。
我原以为一旦位置达到 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 <= xpos
和 xpos + str.size() <= size()
和 at(xpos + I) == str.at(I)
用于 I
控制的所有元素 str
。basic_string::npos
被 -1 转换为无符号类型,因此必须是该无符号类型可表示的最大数。鉴于没有其他位置 xpos
可以满足甚至 npos
xpos 的第一部分,并且 find
在失败时必须返回 npos
,据我所知,当将 npos
作为第二个参数传递时,basic_string::find
是 npos
的唯一有效返回值。
关于c++ - 为什么 std::string.find(text,std::string:npos) 不返回 npos?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1011790/