C++:从文本文件中读取并分离成可变
我有这样一个文本文件:C++:从文本文件中读取并分离成可变
John 20 30 40
mike 30 20 10
如何从文本文件中读取并把它们分成变量名,VAR1,VAR2,VAR3。 这是我的尝试,似乎没有用。请帮助。
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
int main() {
string name,result;
int number1;
ifstream myfile ("marks.txt");
if (myfile.is_open())
{
while (!myfile.eof())
{
getline (myfile,name,'\t');
getline (myfile,var1,'\t');
getline (myfile,var2,'\t');
getline (myfile,var3,'\t');
cout << name << var1 << var2 << var3;
}
myfile.close();
}
else cout << "Unable to open file";
return 0;
}
EDIT 1:
夜曲建议:
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
int main()
{
ifstream inputFile("marks.txt");
string line;
while (getline(inputFile, line))
{
istringstream ss(line);
string name;
int var1, var2, var3;
ss >> name >> var1 >> var2 >> var3;
cout << name << var1 << var2 << var3 << endl << endl;
}
}
输出:
John203040
mike302010
302010
为什么另一个302010 ???
像这样的东西应该工作(我没有编译器方便,所以你可能需要调整这一点):
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
ifstream inputFile("marks.txt");
string line;
while (getline(inputFile, line))
{
istringstream ss(line);
string name;
int var1, var2, var3;
ss >> name >> var1 >> var2 >> var3;
}
}
编辑:刚才又见到了这一点,我不知道为什么我之前选择了get line方法。以下(更简单的解决方案)不起作用吗?
#include <fstream>
using namespace std;
int main()
{
ifstream fin(“marks.txt”);
string name;
int var1;
int var2;
int var3;
while (fin >> name >> var1 >> var2 >> var3)
{
/* do something with name, var1 etc. */
cout << name << var1 << var2 << var3 << “\n”;
}
}
夜曲,你的工作很好。我添加了#include
您的文件末尾必须有空行。 – PlagueHammer 2010-10-15 23:19:19
谢谢夜曲! – diehell 2010-10-15 23:33:21
看起来您需要声明var1,var2和var3。
而且不是这样的:
getline (myfile,name,'\t');
getline (myfile,var1,'\t');
getline (myfile,var2,'\t');
getline (myfile,var3,'\t');
试试这个:
myfile >> name;
myfile >> var1;
myfile >> var2;
myfile >> var3;
不是因为你有什么是错的,但第二个是清洁,将处理所有的空白。
您的输入文件是否以制表符分隔?你会得到什么输出? – 2010-10-15 22:33:15
是的。其制表符分隔。 “ – diehell 2010-10-15 22:38:44
”似乎不起作用“没有帮助。请详细说明。 – JoshD 2010-10-15 22:41:12