第一次上机:
要求:
1、比较两个文本文件并打印出它们第一个不相同的行(文件每行字符数不多于80)。
#include#include int main(int argc, char const *argv[]) { //初始化变量 FILE *fp1,*fp2; int flag=0; char line1[200],line2[200]; //打开文件,如果打开失败给出提示 if( ((fp1=fopen("1.txt","r"))==NULL) || ((fp2=fopen("2.txt","r"))==NULL) ) { printf("cannot open filen"); return 0; } fp1=fopen("1.txt","r"); fp2=fopen("2.txt","r"); //读取内容 while(!feof(fp1)&&!feof(fp2)) { // 按行读取,进行比较 fgets(line1,80,fp1); fgets(line2,80,fp2); // 比较利用库函数strcmp if(strcmp(line1,line2)!=0) { printf("%sn",line1); printf("%sn",line2); flag=1; break; } } // 如果没有读取到不同的内容,则给出提示 if(flag==0) printf("The two files are same"); // 关闭文件 fclose(fp1); fclose(fp2); return 0; }
2、将c语言编写的源文件(.c文件)的每行前加上行号并删除其所有注释。
#include#include #include int main() { // 初始化变量 FILE*fp1,*fp2; char f1[10],f2[10]; char s1[500],t1[500],t2[500]; int i=0,j=0,p=1,n=0,count=0; // 打开文件 if((fp1=fopen("former_test.cpp","r"))==NULL) { printf("cannot open file1n"); return 0; } if((fp2=fopen("now_test.cpp","w"))==NULL) { printf("cannot open file2n"); return 0; } // 读取内容 while( !feof(fp1) ) { // 按行读取 count = 1; fgets(s1, 199, fp1); n = strlen(s1); // 先去注释,再加行号 for( i = 1; i < n; i++ ) { // 分别考虑单行注释与多行注释 if( s1[i] == '/' && s1[i-1] == '/' ) { s1[i-1] = 'n'; s1[i] = ' '; // 每次去除注释后,利用fprint加行号 fprintf(fp2,"",p++); // 将处理后的字符写入目标文件 fputs( s1, fp2 ); count = 0; break; } if( s1[i] == '*' && s1[i-1] == '/' ) { s1[i-1] = 'n'; s1[i] = ' '; fprintf(fp2,"",p++); fputs( s1, fp2 ); count = 0; break; } if( s1[i] == '/' && s1[i-1] == '*' ) { for( j = 0; j < n-i; j++ ) s1[j] = s1[ j + i + 1]; s1[j] = ' '; fprintf(fp2,"",p++); fputs( s1, fp2 ); count = 0; break; } } if(count) fprintf(fp2,"",p++); fputs(s1, fp2); } // 关闭文件 fclose(fp1); fclose(fp2); printf("okn"); return 0; }
第二次上机:
要求:
1、文本文件num1.txt和num2.txt中各有一组用空格分隔的整数,将num1.txt和num2.txt联合排序,并将结果保存在num3.txt中
#includeint main() { FILE *fp1=fopen("num1.txt","r"); FILE *fp2=fopen("num2.txt","r"); FILE *fp3=fopen("num3.txt","w"); if(fp1==NULL||fp2==NULL||fp3==NULL) { printf("cannot open filen"); return 0; } int num[1000]; int count=0; while(!feof(fp1)) { fscanf(fp1,"%d",&num[count]); count++; } while(!feof(fp2)) { fscanf(fp2,"%d",&num[count]); count++; } int temp=0; for (int i = 0; i < count-1; ++i) { for (int j = 0; j < count-1-i ; ++j) { if (num[j]>num[j+1]) { temp=num[j+1]; num[j+1]=num[j]; num[j]=temp; } } } int index=0; while(index fprintf(fp3,"%d ",num[index]); index++; } fclose(fp1); fclose(fp2); fclose(fp3); printf("okn"); }
2、统计一个英文文本文件中26个英文字母出现次数并按英文字母序输出统计结果,查找并替换此英文文本文件中某字符串。
#include#include #include void strreplace(char * Src,char * From,char * To); int main(int argc, char const *argv[]) { //统计一个英文文本文件中26个英文字母出现次数并按英文字母序输出统计结果 // 打开文件 FILE *f,*tf; f=fopen("English.txt","r+"); tf=fopen("temp.txt","w+"); if(f==NULL||tf==NULL) { printf("cannot open filen"); return 0; } // 利用ascii码进行字母统计 int character_num[26]={0,}; char str[1000]; char temp[80]; int a=0; while(!feof(f)) { fgets(temp,80,f); strcat(str,temp); } int n=strlen(str); for (int i = 0; i < n; ++i) { if (isalpha(str[i])) { tolower(str[i]); character_num[(str[i]-97)]++; } } // 输出统计结果 char character='a'; printf("the result:n"); for (int i = 0; i < 26; ++i) { printf("%c:%d ",character,character_num[i]); character++; if ((i+1)%5==0) { printf("n"); } } fclose(f); fclose(tf); // 查找并替换此英文文本文件中某字符串 char buf[1024]={0},from[20],to[20]; printf("Input string you shall find:"); scanf("%s",from); printf("Input string you shall replace to:"); scanf("%s",to); // 把替换的串重新从English.txt读出、写入新文件temp.txt f=fopen("English.txt","r+"); tf=fopen("temp.txt","w+"); if(f==NULL||tf==NULL) { printf("cannot open filen"); return 0; } while(!feof(f)) { fgets(buf,sizeof(buf),f); strreplace(buf,from,to); //每一行都查找、替换目标串 fputs(buf,tf); memset(buf,0,sizeof(buf)); } fclose(f); fclose(tf); // // 把temp.txt内容写回English.txt // f=fopen("English.txt","w+"); // tf=fopen("temp.txt","r+"); // if(f==NULL||tf==NULL) // { // printf("cannot open filen"); // return 0; // } // // while(!feof(tf)) // { // fgets(buf,sizeof(buf),tf); // fputs(buf,f); // memset(buf,0,sizeof(buf)); // } // // fclose(f); // fclose(tf); printf("ok"); return 0; } //自定义的字符串替换函数(所有出现的匹配串都替换为目标串) void strreplace(char * Src,char * From,char * To){ int length_to,length_from; char *sf,*se,endBuf[1024]={0}; length_from = strlen(From); length_to = strlen(To); while(sf = strstr(Src,From)){ // sf获得目标字符串的首地址 if(sf == NULL) break; else { // se获得末尾地址 ,也就是目标字符串后面字符的首地址 se = sf + length_from; strcpy(endBuf,se); // 重置se memset(se,0,strlen(endBuf)); // 正式替换字符串 memcpy(sf,To,length_to); memcpy(sf+length_to,endBuf,strlen(endBuf)); // 重置endBuf memset(endBuf,0,strlen(endBuf)); } } }



