我创建了一个程序,它接受一个输入文件,其中包含 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;
}
}
几点:
- Kindly consider not using endl.
- 您不需要
vector::at
的安全保障当基于i < vec.size()
迭代时.
关于c++ - 用户输入字符串的结构搜索 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57993929/