有时候我们需要的整数以文本的形式存放,例如,某些编程比赛的特定数据,临时存放的特殊含义矩阵,这时我们想要以数字的形式读取这些数据进行使用,我们可以采用对string包装为IO流进行操作。
假设整数文本文件为名为test.txt,其内容为:
1 2 4
5 6 7
8 9 10
test.txt文件和cpp文件位于同一个目录,编写代码进行读取:
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
using namespace std;
int main(){
vector<int> vecs;
ifstream read("test.txt"); // 以读取的方式打开文件
if(!read.is_open()){
cout << "文件读取失败" << endl;
}
string s;
while(getline(read, s)){
istringstream is(s); // 将string包装为string流
int num;
while(is >> num){ // 读到当前字符串的末尾就会停止
vecs.push_back(num);
}
}
// 打印数据
for(int i = 0; i < vecs.size(); ++i) {
cout << vecs[i] << " ";
if((i + 1) % 3 == 0) cout << endl;
}
return 0;
}
输出结果为:
代码解释:sstream头文件定义了三个类型来支持内存IO,这些类型可以向string写入数据,从string读取数据,就像string是一个IO流一样。sstream继承自iostream,所以支持iostream的操作。