我能够在列表中找到这个词,但是我希望在找到该词后显示任何数字。我的名单上有名字,后跟GPA。
示例...
michael 2.3 Rachel 2.5 Carlos 3.0
我想添加显示名称后面的数字的功能一旦找到,我宣布为int GPA,但我不确定如何将其纳入我的程序。
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
string name;
int offset;
string line;
int gpa;
ifstream read_file;
read_file.open("alpha.dat");
cout << "Please enter your name: \n";
cin >> name;
if (read_file.is_open())
{
while (!read_file.eof())
{
getline(read_file, line);
if ((offset = line.find(name)) != string::npos)
{
cout << "the word has been found: \n";
// cout << name << gpa; example to display
}
}
read_file.close();
return 0;
}
答案 0 :(得分:2)
据我所知,您只需要输出从文件中读取的行:
while( getline(read_file, line) )
{
if ((offset = line.find(name)) != string::npos) cout << line << endl;
}
请注意,这不是查找名称的最佳方式。例如,如果用户输入Carl
怎么办?它将作为字符串Carlos
的一部分找到。或者,如果他们输入2
,它将匹配多人的部分GPA。
您可以在此处执行的操作是使用字符串流来读取名称。我们假设它不包含任何空格,这将使它符合您阅读用户名称的方式。顺便说一下,您需要包含<sstream>
。请注意,您可以将GPA作为同一机制的一部分进行宣读。
istringstream iss( line );
string thisname, gpa;
if( iss >> thisname >> gpa ) {
if( thisname == name ) cout << name << " " << gpa << endl;
}
最后,您可能需要考虑在比较字符串时忽略大小写。厚颜无耻的方法就是使用旧的C函数。我知道有这样的C ++方法,但没有一个像stricmp
中的旧<cstring>
那么简单:
if( 0 == stricmp(thisname.c_str(), name.c_str()) ) {
cout << name << " " << gpa << endl;
}
答案 1 :(得分:2)
您可以使用stringstream拆分line
,并将其存储到矢量中,如下所示:
#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
#include <vector>
using namespace std;
int main()
{
string name;
int offset;
string line;
int gpa;
ifstream read_file;
read_file.open("alpha.dat");
cout << "Please enter your name: \n";
cin >> name;
if (read_file.is_open())
{
while (!read_file.eof())
{
getline(read_file, line);
if ((offset = line.find(name)) != string::npos)
{
cout << "the word has been found: \n";
stringstream iss(line);
vector<string> tokens;
string str;
while (iss >> str)
tokens.push_back(str);
cout << tokens[0] << tokens[1];
}
}
read_file.close();
return 0;
}
}
答案 2 :(得分:0)
您可以将getline(read_file, line)...
替换为:
read_file >> name >> gpa;
if (name == search_name)
cout << name << " " << gpa << endl;