关于get line和string find函数的问题 我对C++有了新的见解。我试图从文本的每一行中删除一些单词。但是,如果找不到该单词,则返回4294967295而不是-1。有人遇到过同样的情况吗? 首先,我使用text.txt中的getline while(getline(fintext,line)){ ... }

关于get line和string find函数的问题 我对C++有了新的见解。我试图从文本的每一行中删除一些单词。但是,如果找不到该单词,则返回4294967295而不是-1。有人遇到过同样的情况吗? 首先,我使用text.txt中的getline while(getline(fintext,line)){ ... },c++,C++,然后我用 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); 现在可以了。但我不明白,我该如何修复它。多谢各位 使用 导致循

然后我用

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);
现在可以了。但我不明白,我该如何修复它。多谢各位

使用

导致循环失败的关键点有:

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

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

使用

导致循环失败的关键点有:

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

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

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

因此,您应该使用std::string::npos,而不是依赖于神奇的数字-1。

From

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


因此,您应该使用std::string::npos,而不是依赖幻数-1。

在许多情况下,4294967295是-1。它们都可以用二进制编码为11111111111111111111。重要的是你如何看待这个比特序列。我敢打赌,如果你打开警告,你会得到一个有符号-无符号比较警告,这会给你提示。你从哪个来源学习到使用-1而不是std::string::npos?不管它是什么,它都是错误的。使用-1有一定的逻辑意义,并且在其他一些语言中使用,例如Python。当我开始C++时,我用了很多。直到我发现了字符串::npos.:引脚很多情况下4294967295为-1。它们都可以用二进制编码为11111111111111111111。重要的是你如何看待这个比特序列。我敢打赌,如果你打开警告,你会得到一个有符号-无符号比较警告,这会给你提示。你从哪个来源学习到使用-1而不是std::string::npos?不管它是什么,它都是错误的。使用-1有一定的逻辑意义,并且在其他一些语言中使用,例如Python。当我开始C++时,我用了很多。直到我发现了字符串::npos.:PUsing NPO也是一个很好的实践,因为您可以快速查看项目中的所有引用。为函数提供可区分的结束条件返回对于可读性非常重要。否则,对于一个可能完全合法返回的函数,您可能会得到一个-1的返回值。使用NPO也是一个很好的实践,因为您可以快速查看项目中对它的所有引用。为函数提供可区分的结束条件返回对于可读性非常重要。否则,对于一个可能完全合法地返回它的函数,您可能会得到一个-1返回。
while (line.find(word) != std::string::npos) {
   // ...
}