首页 > 解决方案 > 关于获取行和字符串查找功能的问题

问题描述

我是 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);

现在可以了。但我不明白,我该如何解决。谢谢你。

标签: c++

解决方案


使用std::string::npos.

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

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

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

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


推荐阅读