编程读写文件,解析字符流:
读文件a.txt:
add(-23,45)
add(20,sub(13,10))
add(sub(neg(4),12)
muti(doubleMe(2),5))
div(54,add(3,sub(9,3))
写入文件b.txt: add -23 45
add 20
sub 13 10 add sub neg 4 12
muti doubleMe 2 5
div 54 add 3 sub 9 3
#include <iostream>
#include <fstream>
#include<cstring>
#include<string>
using namespace std;
int main()
{
ifstream fin("a.txt");
if(!fin)cout<<"失败"<<endl;//如果找不到a文件就输出失败
ofstream fout("b.txt");
string t;//t是每一行的字符串
while(getline(fin,t))//得到每一行的字符串t
{
for(char &c:t)//将字符串t中每一个元素C逐个取出
if(c=='('||c==')'||c==',')
c=' ';//如果是被排除在外的字符就转换为空格
fout<<t<<endl;//将修改后的结果写入b文件中
}
fin.close();
fout.close();
return 0;
}
法一:运用getline进行每行的运算符的读写
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char** argv) {
ifstream input("a.txt");//以读的形式打开文件
if(!input)
cout<<"失败"<<endl; //如果没有打开a,提示失败
ofstream ouput("b.txt");//以写的形式打开文件
string s;
int i=0;
while(input>>s)//将a文件中的输入转为字符串s,知道文件结束,string类型以回车结束,故可提取每一行元素
{
for(i=0;i<s.size();i++)
{
if(s[i]=='('||s[i]==')'||s[i]==',')
{
ouput<<" ";//如果是上诉的符号就全部转换为空格
}else{
ouput<<s[i];//否则直接输出原字符
}
}
ouput<<endl;//每一行结束输出一个换行符
}
return 0;
}
法二:利用字符串和数组之间的通用性质将字符串读出并进行转换
弊端:对于输入的格式要求太高,不能输入空格,输入空格,转换就失败了
输入,输出: