我正在尝试搜索文档并找到一个子集来打印出该特定行,但是,它似乎会立即引入整个消息。
ifstream inputFile("searchfile.dat");
int search;
cout << "Enter what you're searching: ";
cin >> search;
string line;
//bool notFound;
while(getline(inputFile, line) /*&& notFound*/){
if (line.find(search)) {
cout << line << endl;
//notFound = false;
}
//line = "";
}
inputFile.close();
这是一项家庭作业,所以我改变了一些变量。回答时请记住这一点(即解释发生的事情,以便我可以从中学习)
非常感谢你!
P.S。这是我目前正在使用的数据:
Name1 Name1 1000001 12.00
Name2 Name2 1000002 14.00
Name3 Name3 1000004 16.00
我需要搜索1000000的数字并打印出该行。例如,我会搜索1000002,它会打印: Name2 Name2 1000002 14.00
现在它会打印整件事
答案 0 :(得分:3)
对于非常基本的修复,请执行此操作
#include<iostream>
#include<fstream>
using namespace std;
int main(){
ifstream inputFile("searchfile.dat");
string search;
cout << "Enter what you're searching: ";
cin >> search;
string line;
while(getline(inputFile, line) ){
if (line.find(search) != string::npos) {
cout << line << endl;
}
}
}
你遇到的问题是双重的。
首先string::find
没有返回可以在布尔上下文中正确计算的内容。它返回可以找到值的索引,或者string::npos
。因此,如果您检查它是否会正确评估您。
另一个问题是您将搜索作为整数输入,然后尝试在字符串中找到它。结果是它调用了size_type find (charT c, size_type pos = 0) const;
的重载,它试图找到一个字符。它以这种方式发生,因为int可以隐式转换为char。您应该将id作为字符串读入,或者在将其与find
一起使用之前将其转换为字符串。
请注意其他一些事情。这段代码有点脆弱,因为它会在该行的任何地方找到该字符串,因此如果名称或工资以某种方式包含该值,则可以找到它。您也不需要明确关闭ifstream
,它会在析构函数中关闭。