gpt4 book ai didi

c++ - 使用包含字符和数字的 C++ 读取文件

转载 作者:太空宇宙 更新时间:2023-11-04 12:47:44 25 4
gpt4 key购买 nike

我有一个包含某种图形演示的文本文件,如下所示:

7

{5, 2, 3}, {1,5}, { }, { }, {3}, { }, { }

现在,我知道如何读取文件并进入 int

    while ((n = myfile.get()) != EOF) 

或者逐行成一个字符串

    getline (myfile,line)

我遇到的问题是,对于这两个选项,我似乎无法真正比​​较我提取的每个字符并检查它是数字还是“,”或“{”或“}”。有没有一种简单的方法可以做到这一点?从昨天开始,我已经为此苦苦思索了几个小时。我尝试了一些 isdigit 和转换,但这对我也不起作用,而且非常复杂。

最佳答案

我认为最简单的解决方案是通过逐个字符地读取文件来让您的手有点脏。我建议您将这些集合存储在一个由 int 组成的 vector 组成的 vector 中(如果您愿意,可以将其可视化为二维数组、矩阵)。

如果第 i 个集合为空,则第 i 个 vector 也为空。

在解析字符的循环中,您将跳过左花括号和逗号。您将对右大括号执行类似的操作,除了您需要更新索引之外,这将帮助我们更新索引 vector 。

当我们真正读到一个数字时,那么就可以convert a char to an int .

完整示例:

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

int main(void) {
char ch;
fstream fin("test.txt", fstream::in);
if(!fin) {
cerr << "Something is wrong...! Exiting..." << endl;
return -1;
}
int N; // number of sets
fin >> N;
vector<vector<int> > v;
v.resize(N);
int i = 0;
while (fin >> ch) {
//cout << ch << endl;
if(ch == '{' || ch == ',')
continue;
if(ch == '}') {
i++;
continue;
}
v[i].push_back(ch - '0');
}
if(i == N) {
cout << "Parsing the file completed successfully." << endl;
} else {
cout << "Parsed only " << i << " sets, instead of " << N << endl;
}
for(size_t i = 0; i < v.size(); ++i) {
if(v[i].size() == 0)
cout << i + 1 << "-th set is empty\n";
else {
for(size_t j = 0; j < v[i].size(); ++j)
cout << v[i][j] << " ";
cout << endl;
}
}
return 0;
}

输出:

gsamaras@aristotelis:/Storage/homes/gsamaras$ g++ main.cpp

gsamaras@aristotelis:/Storage/homes/gsamaras$ ./a.out 
Parsing the file completed successfully.
5 2 3
1 5
3-th set is empty
4-th set is empty
3
6-th set is empty
7-th set is empty

重要说明:这应该作为起点,因为它不会处理多于一位的数字。在这种情况下,您将读取到逗号或右花括号,以确保您读取了数字的所有数字,然后将字符串转换为整数,然后将其存储在相应的 vector 中。

关于c++ - 使用包含字符和数字的 C++ 读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50523818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com