c – 为什么std :: string.find(text,std :: string:npos)不返
发布时间:2020-12-16 10:50:01 所属栏目:百科 来源:网络整理
导读:我正在一个字符串中进行一系列搜索,并且沿着该行的某个地方将丢失其中一个字符串,并且我的搜索集将失败. 我曾经预料到,一旦位置达到std :: string :: npos,它就会留在那里,但事实并非如此.将std :: string :: npos传递给std :: string.find似乎再次开始搜索
我正在一个字符串中进行一系列搜索,并且沿着该行的某个地方将丢失其中一个字符串,并且我的搜索集将失败.
我曾经预料到,一旦位置达到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)对于我控制的所有元素海峡. basic_string :: npos是-1转换为无符号类型,因此必须是该无符号类型可表示的最大数字.鉴于没有其他位置xpos甚至可以满足npos< = xpos的第一部分并且find必须在失败时返回npos,据我所知,npos是basic_string :: find的唯一有效返回值,当传递npos作为第二部分时参数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |