关于获取行和字符串查找函数的问题

Question about get line and string find function

本文关键字:查找 字符串 函数 问题 于获取 获取      更新时间:2023-10-16

我是 c++ 的新手。我正在尝试从文本的每一行中删除一些单词。但是,如果找不到该单词,它将返回 4294967295 而不是 -1。有人遇到同样的情况吗?首先,我使用文本中的"getline.txt

  while(getline(fintext,line)){
...
  }

然后我用

while (line.find(word) != -1){
   line.erase(line.find(word),word.length()-1);
   line.find(word);

它不起作用。

while (line.find(word) != 4294967295){
   line.erase(line.find(word),word.length()-1);
   line.find(word);

它现在有效。但我不明白,我该如何解决它。谢谢。

使用 std::string::npos .

while (line.find(word) != std::string::npos) {
   // ...
}

文档中未能满足循环条件的关键点是:

尽管定义使用 -1size_type 是无符号整数类型,并且由于有符号到无符号的隐式转换,npos 的值是它可以容纳的最大正值。这是一种可移植的方法,用于指定任何无符号类型的最大值。

硬编码-14294967295或任何其他常量在不同的实现中是不可靠的。

来自 cpp首选项

尽管定义使用 -1,但 size_type 是无符号整数类型,并且由于有符号到无符号的隐式转换,npos 的值是它可以容纳的最大正值。这是一种可移植的方法,用于指定任何无符号类型的最大值。

所以你应该使用std::string::npos,而不是依赖幻数-1。