我正在尝试创建一个程序,用于存储CSV文件中的数据,然后在其中搜索关键字。 我有这个代码,并没有显示错误,但它不会运行程序过去要求'输入单词:'
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <sstream>
using namespace std;
int main(){
vector<string> student(860);
vector<string> question(860);
vector<string> answer(860);
int count = 0;
string word;
ifstream file("data2.csv");
if (!file.is_open())
cerr << "File not found" << endl;
while (file.good()){
for (int i = 0; i < 860; i++){
getline(file, student[i], ',');
getline(file, question[i], ',');
getline(file, answer[i], ',');
}
}
cout << "Enter word: ";
cin >> word;
for (int j = 0; j < 860; j++){
if (answer[j].find(word) != std::string::npos){
cout << student[j] << question[j] << answer[j] << endl;
count++;
}
}
cout << count;
return 0;
}
答案 0 :(得分:0)
为了让std::cin
包含用户输入的确切字符串(多个单词?),您可以使用std::getline()
来支持用户指定的多个单词。如果这是你想要的,你的问题陈述中不清楚。否则,如果您要查找的只是一个输入词,我就不会发现只使用std::cin
的问题。
std::string match;
std::cout << "Enter the exact string to search for: ";
std::getline(std::cin, match);
std::cout << "\nSearching for \"" << match << "\"" << std::endl;
此外,在for循环中搜索答案字符串时,您应该更喜欢使用您循环的矢量的内置大小而不是硬编码值。
for ( size_t j = 0; j < answer.size(); ++j )
{
std::size_t found = answer[j].find(match);
if (found != std::string::npos)
{
std::cout << "found \"" << match
<< "\" starting at character " << found << std::endl;
count++;
}
}
std::cout << "occurrences of match criteria: " << count << std::endl;
答案 1 :(得分:0)
错误在getline
,第一次调用它,直到逗号第二次调用直到第二个逗号,3r调用第三个逗号到第二个新行(下一个学生的名称)。
因此getline
调用中的下一次迭代会将question
作为students
名称,然后answer
作为question
,然后是下一个students
{1}} answer
的名字,一团糟!!! ;)所以你永远找不到你要找的单词,因此没有结果。得到它?
要解决此问题,请尝试将上一个getline
更改为getline(file, answer[i]);
答案 2 :(得分:0)
所以,我知道这不是解决问题的最佳方法。但是,在时间紧迫的时候,我能够修复这些错误并添加一个系统(“暂停”);在我的代码结束时,它会让我看到结果。
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <sstream>
using namespace std;
int main(){
vector<string> student(860);
vector<string> question(860);
vector<string> answer(860);
int count = 0;
string word;
ifstream file("data2.csv");
if (!file.is_open())
cerr << "File not found" << endl;
while (file.good()){
for (int i = 0; i < 860; i++){
getline(file, student[i], ',');
getline(file, question[i], ',');
getline(file, answer[i], '\n');
}
}
cout << "Enter word: ";
cin >> word;
for (int j = 0; j < 860; j++){
if (answer[j].find(word) != std::string::npos){
cout << student[j] << question[j] << answer[j] << endl;
count++;
}
}
cout << count << endl;
system("pause");
return 0;
}