【发布时间】:2016-05-02 04:04:02
【问题描述】:
我正在从文件中读取格式化的行,需要对其进行解析并将一些结果输出到文件中。我遇到的麻烦是正确解析输入以处理空格和逗号。文件中的行格式可以有以下几种:
a r3, r2, r1
ah r8, r5, r6, r7
ai r10, i10, r127
所以我可以在一行中有 4-5 个不同的元素。第一个元素是“命令”,然后是空格,然后是用逗号和空格分隔的值。
我目前的实现如下:
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <vector>
#include <bitset>
using namespace std;
void main()
{
string instruction;
vector<string> myString;
ifstream inFile;
inFile.open("myfile.txt");
int i = 0;
if (inFile.is_open()){
cout << "test" << endl;
//Read until no more lines in text file to read
//while (getline(inFile, instruction))
while (inFile >> instruction)
{
istringstream ss(instruction);
string token;
//Separate string based on commas and white spaces
while (getline(ss, token,',')){
//getline(token, token, ' ');
//Push each token to the vector
myString.push_back(token);
cout << myString[i] << endl;
i++;
}
}
}
system("pause");
}
但这不起作用。如果我用a r3, r2, r1 测试它,我只会得到a 并且程序会停止读取,因为它看到了空白。
我尝试的另一个版本是将文件的读取更改为while (getline(inFile, instruction)),但这会将我的字符串拆分为:
a r3
r1
r2
它认为 a(space)r3 是一个元素。它根据逗号正确拆分整行,但初始读取不正确,因为我还需要它来拆分 a 和 r3。我该怎么做?
【问题讨论】:
-
operator>>读取空格分隔的标记。所以它会跳过空格,然后 std::string 会读取所有字符,直到下一个空格(或换行符)字符。