具体问题是这样的:
一个文本文件,内容如下:
10 39 100 4
12 1000 48
31 93 466
现在想要一行一行读取,并且将一行的数据存放到一个数组或容器中。也就是结果是
a[4]={10,39,100,4}
b[3]={12,1000,48}
c[3]={31,93,466}
当然可以存放到vector<int>中。
问一下上述功能怎么样实现呢?
一个文本文件,内容如下:
10 39 100 4
12 1000 48
31 93 466
现在想要一行一行读取,并且将一行的数据存放到一个数组或容器中。也就是结果是
a[4]={10,39,100,4}
b[3]={12,1000,48}
c[3]={31,93,466}
当然可以存放到vector<int>中。
问一下上述功能怎么样实现呢?
解决方案
4
getline 函数可以读取一行,读到之后可以用空格分隔得到每一个,然后用atoi将字符串转换成整数getline 函数可以读取一行,读到之后可以用空格分隔得到每一个,然后用atoi将字符串转换成整数
30
#include <iostream>
#include <fstream>
#include<vector>
using namespace std;
int main()
{
ifstream input_file(“F:\test.txt”);
char buffer[64] = {0};
vector<vector<int>> vec_data;
char *p;
while(input_file.getline(buffer,64))
{
vector<int> one_row;
p = strtok(buffer, ” “);
while(p)
{
int num = atoi(p); // p就是分割出来的数字的字符串形式,转成整型后就是num
p = strtok(NULL, ” “);
one_row.push_back(num);
}
vec_data.push_back(one_row);
}
//打印vector
for(int i = 0; i < vec_data.size(); i++)
{
for(int j = 0; j < vec_data[i].size(); j++)
cout << vec_data[i][j] << ” “;
cout << endl;
}
}
#include <fstream>
#include<vector>
using namespace std;
int main()
{
ifstream input_file(“F:\test.txt”);
char buffer[64] = {0};
vector<vector<int>> vec_data;
char *p;
while(input_file.getline(buffer,64))
{
vector<int> one_row;
p = strtok(buffer, ” “);
while(p)
{
int num = atoi(p); // p就是分割出来的数字的字符串形式,转成整型后就是num
p = strtok(NULL, ” “);
one_row.push_back(num);
}
vec_data.push_back(one_row);
}
//打印vector
for(int i = 0; i < vec_data.size(); i++)
{
for(int j = 0; j < vec_data[i].size(); j++)
cout << vec_data[i][j] << ” “;
cout << endl;
}
}
40
用ifstream 配合getline一行行读取数据,然后用vector嵌套vector来存储数据
对于每行的数据都使用strtok来提取出数字
对于每行的数据都使用strtok来提取出数字
#include <iostream> #include <fstream> #include<vector> using namespace std; int main() { ifstream input_file("F:\test.txt"); char buffer[64] = {0}; vector<vector<int>> vec_data; char *p; while(input_file.getline(buffer,64)) { vector<int> one_row; p = strtok(buffer, " "); while(p) { int num = atoi(p); // p就是分割出来的数字的字符串形式,转成整型后就是num p = strtok(NULL, " "); one_row.push_back(num); } vec_data.push_back(one_row); } //打印vector for(int i = 0; i < vec_data.size(); i++) { for(int j = 0; j < vec_data[i].size(); j++) cout << vec_data[i][j] << " "; cout << endl; } }
3
int fscanf(FILE*stream, constchar*format, [argument…])