用户输入的字符串的结构搜索向量

时间:2019-09-18 13:28:47

标签: c++ vector struct find

我创建了一个程序,该程序可以接收具有1000多个条目的输入文件,格式如下:

年份,类别,获胜,实体

我为一个条目的每个部分创建了一个带有字符串元素的结构。现在,我想请用户输入特定实体的名称,例如“ Emil Jannings”,并返回其所在的索引,以便我可以使用该索引来打印该实体的信息行。

输入文件的前几行是这样的:

年份,类别,获胜者,实体

1927年,演员,假,理查德·巴瑟姆斯(Richard Barthelmess)

1927,ACTOR,TRUE,Emil Jannings

1927年,ACTRESS,FALSE,路易丝梳妆台

如果用户输入“ Emil Jannings”作为输入字符串,我希望我的循环返回它所在的索引。我的问题是,无论如何,循环都会为我返回0。我的循环设置方式从根本上有问题吗?此外,输入文件中存在未知数量的相同实体,Emil Jannings可以显示多次。如何更改循环以继续为我提供找到的每个索引,直到输入文件结束?谢谢。

    for(;(getline(in, str)); i++){

    istringstream iss(str);
    Oscars.push_back(Oscar_Awards());

    getline(iss, str2, ',');
        Oscars.at(i).year = str2;
    getline(iss, str2, ',');
        Oscars.at(i).category = str2;
    getline(iss, str2, ',');
        Oscars.at(i).won = str2;
    getline(iss, str2, ',');
        Oscars.at(i).entity = str2;

}

cout << "Input Name of Entity" << endl;
string input;
cin >> input;



bool found = false;
for(int i = 0; i < Oscars.size(); i++){
    if(Oscars.at(i).entity.find(input)){
        cout << "Found at " << i << endl;
        found = true;
        break;
    }

}

2 个答案:

答案 0 :(得分:3)

您正在使用string::find而不是仅将字符串与字符串进行比较。 假设entity的类型为string。以下代码应该可以正常工作。

bool found = false;
for(int i = 0; i < Oscars.size(); i++){
    if(Oscars[i].entity == input){
        cout << "Found at " << i << '\n';
        found = true;
        break;
    }

}

一些要点:

答案 1 :(得分:1)

问题出在if(Oscars.at(i).entity.find(input)){上:无论何时找不到某些文本,std::string::find都将返回-1。因此,如果第一个条目不包含要搜索的单词,则if(-1)在第一个条目中将被评估为true。