gpt4 book ai didi

c++ - string::find 未找到匹配项

转载 作者:行者123 更新时间:2023-11-30 04:34:03 25 4
gpt4 key购买 nike

我正在尝试使用 string::find 方法来确定字符串“hello”(前后有空格)是否存在于 .txt 文件的一行中。如果是这样,它应该打印出行号(位置不重要)。问题是,它找不到字符串。请帮忙。

int main() {
string key (" hello ");
ifstream myReadFile;
myReadFile.open("test.txt");
string s;
int lineCount = 1;
int found;
if (myReadFile.is_open()) {
while (!myReadFile.eof()) {
getline(myReadFile, s);
found = s.find(key);
if(found != string::npos) {
cout<<lineCount<<endl;
lineCount++;
}
}
}
myReadFile.close();
return 0;
}

最佳答案

如果您看到的问题是您的程序总是打印 1, 2, 3, ... 而不是正确的行号,那是因为您只有在找到子字符串时才增加 lineCount ;修复它移动 lineCount++if(found != string::npos) block 之后。

如果您根本看不到任何输出,要么文件不包含 "hello "(大小写很重要,而且那些空格字符也不会匹配其他空格)或 "test .txt"不在正确的位置或名称错误。

注意:foundstring::npos 之间的比较在这里是可以的(即使一个是有符号的 int 而另一个是size_t(在 64 位系统上可能是 unsigned int 或者可能是 unsigned long long)。有趣的是,如果你改变 foundunsigned intsize_t 恰好是更宽的无符号类型(在 32 位机器上,您可以通过制作 found 一个 unsigned short)。由于您实际上并没有使用 found 的值,因此最好完全避免转换,而只是执行 如果 (s.find(key) != string::npos).

关于c++ - string::find 未找到匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6247396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com