模板
#include <iostream> #include <cstdlib> #include <ctime> #include <fstream> #include <cstdio> using namespace std; int main() { ofstream out ("D:\\temp\\output.txt",ios::out); srand((unsigned)time(NULL));//用于产生随机数 for(int j=0;j<10;j++){ if(!out) cout<<"打开失败"<<endl; out<<' '<<rand()%10; } out.close();//两种文件输入输出流一起用的话一定要写这句 ifstream in ("D:\\temp\\output.txt",ios::in ); int a; for(int i=0;i<10;i++){ if(!in) cout<<"打开失败"<<endl; in>>a; cout<<a<<' '; } in.close(); }
详情见网址:http://blog.csdn.net/u014665013/article/details/45623733
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<string> #include<cmath> #define INF f0x3f3f3f3f #define BUF_N 1000 using namespace std; void pop(int s,int *buf,int c,FILE *fp) { int i; if(s) fprintf(fp,"%d %d ",c,*buf); else { fprintf(fp,"%d ",-c); for(i=0; i<c; i++) fprintf(fp,"%d ",buf[i]); } } void dopack(FILE *r,FILE *w) { int buf[BUF_N]; int pos=0;//下一个数字在buf中将要存放的位置 int c=0;//当前段已读入的整数个数 int pst;///确定符号 int cst; while(fscanf(r,"%d",buf+pos)==1) { if(c==0) { c=pos=1; continue; } if(c==1) { pst= ( buf[0]==buf[1] ) ; ///pst记录前两个是否相同 pos=pos+1-pst; ///前两个不相同时 pos= 2 c=2; continue; } cst = ( buf[pos-1]==buf[pos] );///第二个和第三个相同 if( pst&&!cst ) ///前边两个相同,后面的出现不相同 { pop(pst,buf,c,w); buf[0]=buf[1]; c=pos=1; pst=cst; } else if( !pst&&cst || pos==BUF_N-1 ) ///前两个不相同 第二个第三个相同 || 到最后 { pop(pst,buf,c-1,w); buf[0]=buf[pos-1]; c=2; if(!cst) ///文件最后 { buf[1]=buf[pos]; pos=2; } else ///前两个不相同 第二个第三个相同 { pos=1; pst=1 ;//填空1 } } else ///前后都相同,前后都不相同 { c++; if(!pst)pos++; } }//while if(c>0) pop(pst,buf,c,w); //填空2 } int main() { FILE *rfp; FILE *wfp; if((rfp=fopen("D:\\in.txt","r"))==NULL) { printf("cannot open1!\n"); exit(1); } if((wfp=fopen("D:\\out.txt","w"))==NULL) { printf("cannot open2!\n"); fclose(rfp); exit(2); } dopack(rfp,wfp); fclose(wfp); fclose(rfp); return 0; }