- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在阅读一本关于 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/
我想使用 -1 来表示尚未计算的大小: std::vector sizes(nResults, -1); 我想知道为什么没有更具表现力的方式: std::vector sizes(nResults,
您好,我目前是一年级学生,仍在学习 R 在线类(class),我收到一条错误消息:“ans[npos] <- rep(no, length.out = len)[npos] 中的错误:替换的长度为零另
我正在对一个字符串进行一系列搜索,并且在该行的某处会遗漏一个字符串,并且我的一组搜索应该会失败。 我原以为一旦位置达到 std::string::npos 它就会留在那里,但事实并非如此。将 std:
在自定义类的自定义 find() 方法返回自定义数据结构中元素的索引位置的场景中,有没有比返回 string::npos 更优雅的东西? find() 方法的返回类型是size_t。所以我需要它的类型
我是 C++ 的新手,刚从 Java 转过来,对此感到疑惑: pos = result.find(remove[i]); if (pos == string::npo
我正在阅读一本关于 C++ 的书,它只是介绍了如何使用 string::npos 检查字符串中是否存在字符位置。不过,我不明白这种机制怎么可能知道我指的是哪个字符串!此特定代码正在计算子字符串的出现次
这个问题在这里已经有了答案: What does string::npos mean in this code? (12 个答案) 关闭 9 年前。 下面的语句是什么意思? string s
以下代码片段中的短语 std::string::npos 是什么意思? found = str.find(str2); if (found != std::string::npos) std:
我的问题基本上是,每当我使用 Visual Studio(Windows 10 计算机上的 2015 社区版)进行调试时,当我尝试将鼠标悬停在变量上或查看调试 View 的本地或自动部分中的变量时,我
我是一名初学者程序员,如果要了解代码及其工作原理,我会尽力了解这一部分。 所以这是代码: #include #include //C++ Strings Library using namesp
我的代码计算字符串 temp 中的空格,效果很好。在代码的后面,我有一个类似的循环,但没有按预期结束。 根据我的调试和一些研究,我确定 while 循环没有在应该停止的时候停止第二次,因此抛出异常(s
std::string.npos 曾经有效吗? (与正确的 std::string::npos 相反。) 我在我正在处理的一个旧项目中经常看到它,它不能用 VS2010 编译。 它是前标准时代的东西吗
我编写了一个程序,使用 find_last_of 方法在字符串中查找字符。 // ... unsigned found; found = name.find_last_of(character); i
我正在尝试让这个函数分割一个字符串,然后在不带空格且全部小写的情况下返回它。为此,我试图找到一个 "" 来查看字符串 "The Time Traveler (for so it would be co
标题相对不言自明。我认识到与其他答案的相似性,但所有这些都有不同的运算符安排(因此有不同的转换规则)。所以我需要一个可以澄清这个特殊情况的答案。 如果有人能指出解释这一点的标准部分,我会很乐意投票并接
我收到一个错误: error: comparison of constant 18446744073709551614 with expression of type 'unsigned in
这个问题在这里已经有了答案: Why is (18446744073709551615 == -1) true? (4 个答案) 关闭 5 年前。 在构造函数中: CSVBMFBlockModelR
#include #include #include #include using namespace std; int main(int argc, char* argv[]) { ifst
请查看下面的代码片段,特别是第一个“else if”语句。我希望用户能够执行此操作: 加载文件名 所以我想检查“load”是否在字符串中,并尝试打开“load”之后的任何内容。然而,string::n
如果std::size_type的 std::string是默认分配器的, 21.3.1 Class template basic_string typedef typename allocator_
我是一名优秀的程序员,十分优秀!