我正在一个字符串中进行一系列搜索,并且沿着该行的某个地方将丢失其中一个字符串,并且我的搜索集将失败.
我曾预料到,一旦位置达到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
Run Code Online (Sandbox Code Playgroud)
为什么不指示字符串的结尾?
更新:意图是按顺序搜索一系列字符串,并在结尾检查结果
pos = str.find(string1, pos)
pos = str.find(string2, pos)
pos = str.find(string3, pos)
if (pos != std:string::npos)
{ // All strings found
Run Code Online (Sandbox Code Playgroud)
CB *_*ley 10
查看规范,我认为您的实现中可能存在错误.
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.
| 归档时间: |
|
| 查看次数: |
9704 次 |
| 最近记录: |