【发布时间】:2016-07-22 08:12:28
【问题描述】:
我正在尝试找出处理文本输入的最佳方式,就像我在 C 中使用 fscnaf 一样。
以下似乎适用于包含...的文本文件
string 1 2 3
string2 3 5 6
我也想要。它读取每行上的各个元素并将它们放入各自的向量中。你会说这是处理输入的好方法吗?输入总是以一个字符串开头,然后在每行后面跟着相同数量的数字。
int main(int argc, char* argv[])
{
ifstream inputFile(argv[1]);
vector<string> testStrings;
vector<int> intTest;
vector<int> intTest2;
vector<int> intTest3;
string testme;
int test1;
int test2;
int test3;
if (inputFile.is_open())
{
while (!inputFile.eof())
{
inputFile >> testme;
inputFile >> test1;
inputFile >> test2;
inputFile >> test3;
testStrings.push_back(testme);
intTest.push_back(test1);
intTest2.push_back(test2);
intTest3.push_back(test3);
}
inputFile.close();
}
else
{
cout << "Failed to open file";
exit(EXIT_FAILURE);
}
return 0;
}
更新
我已将 while 循环更改为这个...更好了吗?
while (getline(inputFile, line))
{
istringstream iss(line);
iss >> testme;
iss >> test1;
iss >> test2;
iss >> test3;
testStrings.push_back(testme);
intTest.push_back(test1);
intTest2.push_back(test2);
intTest3.push_back(test3);
}
【问题讨论】:
-
如果您尝试处理来自文本文件的输入,该文件包含单独的文本行,每行文本以换行符终止,则解析此输入的适当方法是使用 std: :getline() 读取每一行。这就是 std::getline() 的用途。只有在读完整行之后,您才应该尝试以某种方式解析其内容。从读取行构造
std::istringstream是一种合理的方法,但这不是唯一的方法。 -
我试过了,但对如何处理 getline 感到困惑。我之前处理它的方式是在我使用 getline 之后逐个字符地检查。我正试图摆脱这一点。
-
while (!inputFile.eof())会让你失望。在这里阅读更多:stackoverflow.com/questions/5605125/… -
您是说也要使用 getline 吗?到目前为止它有效。不是说我的做法是正确的——这就是我在这里的原因。
-
我对循环进行了更改 - 你们介意检查一下吗?