我正在尝试创建一个C ++程序,它允许我从文件中读取并找到每行输入的匹配项。请注意,每一行都是由昏迷分隔的单个记录。如果找到匹配项,则预期输出将是记录中的字符串。
例如:来自file =>的数据
安德鲁,安迪,安德鲁安德森,玉,厌倦,玉索尼娅刀片输入=>玉
输出=>疲惫
我该怎么做?我正在尝试实施strtok,但无济于事。到目前为止,我没有取得好成绩。有人可以帮帮我吗?
修改
关于这个问题,我想我到了某个地方......但是当我运行它时输出屏幕仍会崩溃。这是我的代码
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
main () {
// string toks[];
char oneline[80],*del;
string line, creds[4];
int x = 0;
ifstream myfile;
myfile.open("jake.txt");
if (myfile.is_open())
{
while (!myfile.eof())
{
getline(myfile,line);
strcpy(oneline,line.c_str());
del = strtok(oneline,",");
while(del!=NULL)
{
creds[x] = del;
del = strtok(NULL,",");
x++;
}
}
myfile.close();
}
else
cout << "Unable to open file";
system("pause");
}
有人可以为我解释这个吗?
编辑......
我在这方面取得了一些进展......现在的问题是,当输入与下一行匹配时,它会崩溃......
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
main () {
// string toks[];
char oneline[80],*del;
string line, creds[3], username, password;
int x = 0;
cout<<"Enter Username: ";
cin>>username;
cout<<"Enter Password: ";
cin>>password;
ifstream myfile;
myfile.open("jake.txt");
if (myfile.is_open())
{
while (!myfile.eof())
{
getline(myfile,line);
strcpy(oneline,line.c_str());
del = strtok(oneline,",");
while(del!=NULL)
{
creds[x] = del;
del = strtok(NULL,",");
++x;
}
if((creds[0]==username)&&(creds[1]==password))
{
cout<<creds[2]<<endl;
break;
}
}
myfile.close();
}
else
cout << "Unable to open file";
system("pause");
}
有人可以帮我这个吗?
答案 0 :(得分:3)
您可以使用boost tokenizer:
#include <boost/tokenizer.hpp>
typedef boost::char_separator<char> separator_type;
boost::tokenizer<separator_type> tokenizer(my_text, separator_type(","));
auto it = tokenizer.begin();
while(it != tokenizer.end())
{
std::cout << "token: " << *it++ << std::endl;
}
另请参阅getline一次从文件中解析一行。
答案 1 :(得分:0)
int main ()
{
ifstream file("file.txt");
string line;
while (getline(file, line))
{
stringstream linestream(line);
string item;
while (getline(linestream, item, ','))
{
std::cout << item << endl;
}
}
return 0;
}