gpt4 book ai didi

C++ getline() 函数引入整个文件

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

我正在尝试搜索文档并找到一个子集来打印出该特定行,但是,它似乎会立即提取整个消息。

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();

这是一项家庭作业,所以我更改了一些变量。回答时请记住这一点(即解释发生了什么,以便我从中学习)

非常感谢!

附言这是我目前正在处理的数据:

Name1  Name1  1000001  12.00
Name2 Name2 1000002 14.00
Name3 Name3 1000004 16.00

我需要搜索 1000000 的号码并仅打印该行。例如,我会搜索 1000002,它会打印:Name2 Name2 1000002 14.00

现在它将打印整个东西

最佳答案

要进行非常基本的修复,请执行此操作

#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 不会返回可以在 bool 上下文中正确评估的内容。它返回可以找到该值的索引或以其他方式返回 string::npos。因此,如果您检查它,它将评估您是否正确。

另一个问题是您将搜索输入为整数,然后尝试在字符串中查找它。结果,它正在调用此 size_type find (charT c, size_type pos = 0) const; 重载 find,它试图找到一个字符。之所以会这样,是因为 int 可以隐式转换为 char。在使用 find 之前,您应该将您的 ID 作为字符串读入或将其转换为字符串。

注意一些其他的事情。这段代码有点脆弱,因为它会在该行的任何位置找到该字符串,因此如果姓名或工资以某种方式包含该值,它就会被发现。您也不需要显式关闭 ifstream,它在析构函数中关闭。

关于C++ getline() 函数引入整个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42015260/

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