我是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);
现在可以使用。但是我不明白,我该如何解决。谢谢。
答案 0 :(得分:3)
while (line.find(word) != std::string::npos) {
// ...
}
documentation中导致循环条件失败的关键点是:
尽管定义使用
-1
,但是size_type
是无符号整数类型,由于signed-to-unsigned implicit conversion,npos
的值是它可以容纳的最大正值。这是一种可移植的方法,可以指定任何无符号类型的最大值。
硬编码-1
,4294967295
或任何其他常量在不同的实现中都不可靠。
答案 1 :(得分:3)
尽管定义使用-1,但是
size_type
是无符号整数类型,由于有符号到无符号的隐式转换,npos的值是它可以容纳的最大正值。这是一种可移植的方法,可以指定任何无符号类型的最大值。
因此,您应该使用std::string::npos
,而不要依赖魔法数字-1。