Noo*_*eer 3 c++ string parsing
我正在从文件中读取格式化的行,需要解析它并将一些结果输出到文件.我遇到的麻烦是正确解析输入以处理空格和逗号.文件中的行格式可以是以下内容:
a r3, r2, r1
ah r8, r5, r6, r7
ai r10, i10, r127
Run Code Online (Sandbox Code Playgroud)
所以我可以拥有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");
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用.如果我测试它a r3, r2, r1
,我只会得到a
并且程序停止读取,因为它看到了空白区域.
我尝试的另一个版本是将文件的读取更改为while (getline(inFile, instruction))
,但这会将我的字符串拆分为:
a r3
r1
r2
Run Code Online (Sandbox Code Playgroud)
它认为(空间)r3是一个元素.它基于逗号正确分割整行,但初始读取不正确,因为我需要它也分割a和r3.我怎样才能做到这一点?
这将完成这项工作.
if (inFile.is_open()){
cout << "test" << endl;
//Read until no more lines in text file to read
while (getline(inFile, instruction))
{
istringstream ss(instruction);
string token;
//Separate string based on commas and white spaces
getline(ss,token,' ');
myString.push_back(token);
cout << myString[i] << endl;
i++;
while (getline(ss, token,',')){
ss.ignore();
myString.push_back(token);
cout << myString[i] << endl;
i++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
要点:
getline(inFile,instruction)
会让你整行
getline(ss,token,' ')
阅读,直到白色空间
最后
getline(ss,token,',')
读到逗号,忽略流中的一个字符.ss.ignore()
请务必注意,getline
如果达到End of Stream ,则停止.
inFile>>instruction
默认情况下,您的读取时间为空格.要读取整行,您必须使用getline.