gpt4 book ai didi

c++ - 为什么 std::string.find(text,std::string:npos) 不返回 npos?

转载 作者:太空狗 更新时间:2023-10-29 19:36:53 29 4
gpt4 key购买 nike

我正在对一个字符串进行一系列搜索,并且在该行的某处会遗漏一个字符串,并且我的一组搜索应该会失败。

我原以为一旦位置达到 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)对于所有元素 Istr 控制.

basic_string::npos是 -1 转换为无符号类型,因此必须是该无符号类型可表示的最大数字。鉴于没有其他位置xpos甚至可以满足npos的第一部分<= xposfind必须返回 npos关于失败,据我所知nposbasic_string::find 的唯一有效返回值当通过 npos作为第二个参数。

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

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com