我有一个项目,我必须从.txt文件中读取矢量列表并解析它。我在屏幕上显示了矢量列表,但我不知道如何解析它。
#include <iostream>
#include <cstring>
#include <fstream>
#include <conio.h>
using namespace std;
int main() {
ifstream vl;
vl.open("PIXA.txt");
char output[100];
if (vl.is_open()) {
while (!vl.eof()) {
vl >> output;
cout << output;
}
vl >> output;
cout << output;
}
cin.ignore();
cin.get();
vl.close();
return 0;
}
有人可以帮忙添加代码,以便我可以解析这个.txt文件吗?
这是.txt文件的样子:
J
366 -1722 583
366 356 1783
866 789 1033
866 -1289 -167
366 -1722 583
J
-500 -1472 150
0 -1039 -600
0 1039 600
-500 606 1350
-500 -1472 150
J
366 356 1783
-500 606 1350
0 1039 600
866 789 1033
366 356 1783
J
366 -1722 583
866 -1289 -167
0 -1039 -600
-500 -1472 150
366 -1722 583
答案 0 :(得分:1)
所以,有两件事可以帮到你。
首先,std::getline
可以使用可选的分隔符参数。这很方便,因为您的矩阵由J
分隔。
std::string line;
std::getline(in, line, 'J')
这将使line
为空(对于文件中的第一个条目)或者包含一堆以空格分隔的整数的长字符串。请注意,std::getline
会将分隔符从流中拉出,但不会将其添加到字符串参数中,因此在解析整数位时,您不必担心J
您可以将其输入std::stringstream
,然后像这样将循环中的所有整数抽出:
std::vector<int> matrix;
std::stringstream ss(line);
int i;
while (ss >> i)
matrix.push_back(i);
你会得到一个漂亮的1维向量,其中包含你的所有数字。编写一个简单的索引函数,可以在一个矩阵所需的行,列格式之间进行转换,以及你需要一个向量的偏移格式,这是一个练习给读者,因为它非常简单。不要忘记处理第一个J
的空行情况!
你可以将这些东西包裹起来,
while (std::getline(in, line)) { /* ... */ }
很容易,做一些事情,比如生成一个矢量矢量,这些矢量很容易在你的应用程序中使用。