※ 引述《HelloTony (嗨东尼)》之铭言:
: 老师要我们用DevC++打一个可以写信的cord
: 可以读取一个test.txt档
: 其中有4个人(2男2女)的名字和4个人的email
: 要把它printf到另一个out.txt档中
: 其中”王大明“要改成”王先生”(小姐依此类推)
: 再把email也printf出来
: 然后要加入信的内容
: 大致上知道要用fgets.strcpy.strcat……
: 但是不知道如何下手QAQ
: 再四天就要交了
: 但是也想搞懂啊~~
: 还有请各位帮忙了谢谢
刚刚下班看到这题
小弟不才 想说来解看看这题
请各位版大对我的解法 不吝指教 感恩
回到正题
其实原PO 这题的解法 端看
Data 端 的资料长的如何
我假设 原PO 所说的 test.txt 及 output.txt的格式如下:
//test.txt
王晓明 男 smallming@gmail.com
无全顺 女 nopassall@hotmail.com
张晓岚 女 lan@as.com
//output.txt
王先生 smallming@gmail.com
无小姐 nopassall@hotmil.com
张小姐 lan@as.com
则 小弟私以为 可以直接用fstream
一行一行处理
source code 如下:
// File Name : FILEIO.cpp
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;
//用来读取 Data的struct
typedef struct{
string name;
string gender;
string email;
}email_entry;
// main function
int main(){
email_entry input_s;
string output_s;
fstream filein,fileout;
filein.open("D:\\test.txt",ios::in|ios::binary);
fileout.open("D:\\output.txt",ios::out|ios::binary);
if(filein==NULL)
{
cerr <<"filein 档案开启失败" << endl;
exit(1);
}
if(fileout==NULL)
{
cerr << "fileout 档案开启失败" << endl;
exit(2);
}
while(!filein.eof())//尚未到档案尾端
{
//variable initialized
input_s.name ="";
input_s.gender="";
input_s.email="";
output_s ="";
// input string with filein fstream
filein >> input_s.name >> input_s.gender >> input_s.email;
cout <<"从档案读入资料: " << input_s.name << " "
<< input_s.gender << " "
<< input_s.email << endl;
// reset input_s.gender
if(input_s.gender.compare("男")==0)//如果是男
input_s.gender ="先生";
else //假设只有两种性别的话
input_s.gender ="小姐";
//假设名字是中文
output_s +=input_s.name.substr(0,sizeof(wchar_t));
output_s +=input_s.gender;
output_s +=input_s.email;
cout <<"以输入档案资料 : " << output_s << endl;
fileout << output_s<<endl;
}// while end
filein.close();
fileout.close();
}//main end
以上再假设为format data的用fstream 存取
用这个方式要注意的是EOF需在最后一笔资料的尾端
以及 fstream 的<< operator每次输入 只到前一whitespace (0x20)
这是小弟想到的解法
如有错误 请各位大大不吝指教 XD