加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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作为第二部分时参数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读