我正在尝试编写用于解析和处理文本文件的程序。在没有成功实施sscanf后,我决定尝试stringstream。
我有包含用空格分隔的数据的字符串向量,例如:
some_string another_string yet_another_string VARIABLE_STRING_NO_1 next_string
我写了代码,预期的结果是:
Counter: 4
Variable number 1 : VARIABLE_STRING_NO_1
Variable number 2 : VARIABLE_STRING_NO_2
Variable number 3 : VARIABLE_STRING_NO_3
Variable number 4 : VARIABLE_STRING_NO_4
但相反我得到:
Counter: 4
Variable number 1 : VARIABLE_STRING_NO_1
Variable number 2 : VARIABLE_STRING_NO_1
Variable number 3 : VARIABLE_STRING_NO_1
Variable number 4 : VARIABLE_STRING_NO_1
谁能把我推向正确的方向?(例如,使用其他容器代替矢量,将方法更改为...等)
另外,如果VARIABLE_STRING包含 2 个中间有空格的子字符串怎么办?这在我的数据中是可能的。
示例代码:
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
int main()
{
vector<string> vectorOfLines, vectorOfData;
vectorOfLines.push_back("some_string another_string yet_another_string VARIABLE_STRING_NO_1 next_string");
vectorOfLines.push_back("some_string another_string yet_another_string VARIABLE_STRING_NO_2 next_string");
vectorOfLines.push_back("some_string another_string yet_another_string VARIABLE_STRING_NO_3 next_string");
vectorOfLines.push_back("some_string another_string yet_another_string VARIABLE_STRING_NO_4 next_string");
string data = "", trash = "";
stringstream token;
int counter = 0;
for( int i = 0; i < (int)vectorOfLines.size(); i++ )
{
token << vectorOfLines.at(i);
token >> trash >> trash >> trash >> data >> trash;
vectorOfData.push_back(data); // wrong method here?
counter++; // counter to test if for iterates expected times
}
cout << "Counter: " << counter << endl;
for( int i = 0; i < (int)vectorOfData.size(); i++ )
{
cout << "Variable number " << i + 1 << " : " << vectorOfData.at(i) << endl;
}
return 0;
}
请原谅我的新手问题,但在过去 5 天尝试了不同的方法之后,我到了发誓并气馁继续学习的地步。
是的,我对 C++ 很陌生。
我已经在 PHP 中成功地完成了相同的程序(这也是完全的新手),看起来 C++ 做起来要困难得多。