有关获取行和字符串查找功能的问题

时间:2019-03-31 04:52:35

标签: c++

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

中的“ getline”
  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);

现在可以使用。但是我不明白,我该如何解决。谢谢。

2 个答案:

答案 0 :(得分:3)

使用std::string::npos

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

documentation中导致循环条件失败的关键点是:

  

尽管定义使用-1,但是size_type是无符号整数类型,由于signed-to-unsigned implicit conversionnpos的值是它可以容纳的最大正值。这是一种可移植的方法,可以指定任何无符号类型的最大值。

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

答案 1 :(得分:3)

来自cppreference

  

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

因此,您应该使用std::string::npos,而不要依赖魔法数字-1。