c++ - 用户输入字符串的结构搜索 vector

标签 c++ vector struct find

我创建了一个程序,它接受一个输入文件,其中包含 1000 多个条目,格式如下:

年份、类别、获奖、实体

我为一个条目的每个部分创建了一个包含字符串元素的结构。我现在想要求用户输入特定实体的名称,例如“Emil Jannings”并返回它所在的索引,这样我就可以使用该索引打印出该实体的信息行。

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

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

1927, Actor ,假,理查德·巴塞尔梅斯

1927, Actor ,真实,埃米尔詹宁斯

1927,女 Actor ,假的,路易丝德莱赛

如果用户输入“Emil Jannings”作为输入字符串,我希望我的循环返回它所在的索引。我的问题是无论如何循环都会为 i 返回 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;
    }

}

最佳答案

您正在使用 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;
    }

}

几点:

关于c++ - 用户输入字符串的结构搜索 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57993929/

相关文章:

c++ - 为什么 std::fstream 使用 char*?

c++ - 根据 C++ 中的列对具有 double 的 vector 的 vector 进行排序

c++ - 将 const 结构引用转换为非常量指针

c++ - 带有指针和构造函数的 typedef 结构

堆或堆栈上的 C++ vector ?

c++ - 具有堆对象和销毁冲突的数据类型的浅拷贝

c++ - 使用 reverse_iterator 而不是 const_reverse_iterator 并得到讨厌的编译器警告和错误

c++ - 为什么没有默认的 move 分配/move 构造函数?

c++ - vector n 维 vector 本身具有特定的数据类型

c - C 中的结构语法 (->)