gpt4 book ai didi

c++ - string::npos 如何知道我指的是哪个字符串?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:09 28 4
gpt4 key购买 nike

我正在阅读一本关于 C++ 的书,它只是介绍了如何使用 string::npos 检查字符串中是否存在字符位置。不过,我不明白这种机制怎么可能知道我指的是哪个字符串!此特定代码正在计算子字符串的出现次数。

代码:

for (int i=cats.find("cat",0);i!=string::npos;i=cats.find("cat",i)) {
++catCount;
++i;
}

我知道它在单词第一次出现时开始循环,每次通过都会递增计数器以避免对同一个子字符串计数两次,然后在每次循环结束时计数器跳转到子字符串的下一次出现。当计数器不作为字符串的字符索引存在时,循环停止。

虽然这个字符串叫做 cats,但在“string::npos”中找不到“cats”,所以它到底是怎么知道我正在搜索的变量的?仅仅是因为那是调用 .find() 的最后一个变量吗?

谢谢!

最佳答案

如果find找不到你要找的东西,它返回一个标记值,std::string::npos .无需了解有关字符串本身的任何信息。所需要的只是返回一个不能是有效索引的值。

例如,它可以实现为:

static const size_t npos = std::numeric_limits<size_t>::max();

size_t string::find(...)
{
// if we didn't find it...
return npos;
}

此外,您不应该使用 int存储返回值,因为它不是 find返回。如果你有一个很长的字符串并且返回的索引是 > numeric_limits<int>.max() 怎么办? ?那么现在您已经调用了未定义的行为。

关于c++ - string::npos 如何知道我指的是哪个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21654609/

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