文件流
文件模式
方式 | 含义 |
---|
in | 读 |
out | 写,默认截断 |
app | 写前定位到末尾 |
ate | 打开文件定位到末尾 |
trunc | 截断文件,就是之前文本内容全部不要了 |
binary | 二进制方式 |
文件流头文件
项目 | Value |
---|
ifstream | 读 |
ostream | 写 |
fstream | 读写(一般用这个就够了) |
代码
ifstream input(argv[1]);
ofstream output(argv[2]);
sales_data total;
if(read(input,total)){
sales_data trans;
while(read(input,trans)){
if(total.isbn()==trans.isbn())
total.combine(trans);
else{
print(output,total)<<endl;
total = trans;
}
}
print(output,total);
}
else cerr <<"No data" <<endl;
for(auto p = argv + 1 ;p != argv + argc;p ++){
ifsream input(*p);
if(input){...}
else cerr<<"no sucn file"<<endl;
}
运行![在这里插入图片描述](https://img-blog.csdnimg.cn/20210403140527352.png)
结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210403140715530.png)
string流
头文件
项目 | Value |
---|
sstream | 向string读写文件 |
模式
项目 | Value |
---|
istringstream | 读 |
ostringstream | 写 |
stringstream | 读写 |
string流每次输出以空格为分割,即>>时;
代码
#include<iostream>
#include<string>
#include<vector>
#include<sstream>
using namespace std;
struct PersonInfo
{
string name;
vector<string> phones;
};
int main(){
string line,word;
vector<PersonInfo> people;
while(getline(cin,line)){
PersonInfo info;
istringstream record(line);
record >> info.name;
while(record>>word){
info.phones.push_back(word);
}
people.push_back(info);
}
for(const auto &entry : people){
ostringstream formated,badnumber;
for(const auto &nums:entry.phones){
if (nums.size()<6)
badnumber<<" "<<nums;
else
formated<<" "<<nums;
}
if(badnumber.str().empty())
cout << entry.name <<" "<<formated.str()<<endl;
else
cerr << "input error: "<<entry.name <<"invalid number: "<<badnumber.str()<<endl;
}
}
结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210403143555817.png)