在C ++中查找单词

时间:2014-02-12 01:53:28

标签: c++ file while-loop

我能够在列表中找到这个词,但是我希望在找到该词后显示任何数字。我的名单上有名字,后跟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;
    }

3 个答案:

答案 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;