第一次上机:
要求:
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 file\n");
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("%s\n",line1);
printf("%s\n",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 file1\n");
return 0;
}
if((fp2=fopen("now_test.cpp","w"))==NULL)
{
printf("cannot open file2\n");
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"/*""%d""*/",++p);// 将处理后的字符写入目标文件
fputs
(, s1) fp2 ;=
count 0 ;break
;}
if
([ s1]i== '*' && [ s1-i1]== '/' ) [
{
s1-i1]= '\n' ;[
s1]i= ';' fprintf(
,"/*"fp2"%d""*/",++)p;fputs(
,) s1; fp2 =0
count ; break;
}if
(
[] s1==i'/' && [ - s11i]=='*' ) for (
{
=0 j ; <- j ; n++i) j[ ]
s1=j[ + s1+ j 1 i ] ;[]
s1=j';' fprintf (,
"/*""%d"fp2"*/",++);pfputs(,
); s1= fp2 0;
count break ;}
}if
(
)
fprintf(count,
"/*""%d"fp2"*/",++);pfputs(,
);s1} fp2// 关闭文件 fclose
(
)
;fclosefp1()
;printffp2("ok\n"
);return0;
} #include
int
第二次上机:
要求:
1、文本文件num1.txt和num2.txt中各有一组用空格分隔的整数,将num1.txt和num2.txt联合排序,并将结果保存在num3.txt中
main(
) *=fopen
{
FILE (fp1"num1.txt","r");*=fopen
FILE (fp2"num2.txt","r");*=fopen
FILE (fp3"num3.txt","w");if(==
NULL||fp1==NULL||fp2==NULL)fp3printf("cannot open file\n"
{
);return0;
} int[
1000
] num;int=0
; countwhile(!
feof())fscanffp1(,
{
"%d",fp1&[])num;count++;}
countwhile(
!
feof())fscanffp2(,
{
"%d",fp2&[])num;count++;}
countint=
0
; tempfor(int
= 0; i < -1 i ; count++)for (iint
{
= 0; j < -1 j - count;++)i if (j[
{
] [num+j1>num]j)=[+
{
temp1num]j;[+1
num]j=[];num[j]=
num;j}}temp}
int
=
0
; indexwhile(<
)fprintfindex(count,
{
"%d ",fp3[])num;index++;}
indexfclose(
)
;fclosefp1()
;fclosefp2()
;printffp3("ok\n"
);}#include
#
2、统计一个英文文本文件中26个英文字母出现次数并按英文字母序输出统计结果,查找并替换此英文文本文件中某字符串。
include#
includevoid
strreplace(
char *,char * Src,char * From); int Tomain(
int ,charconst argc* [ ] )argv//统计一个英文文本文件中26个英文字母出现次数并按英文字母序输出统计结果// 打开文件 *
{
,
*
FILE ;f=fopentf(
f"English.txt","r+");=fopen(
tf"temp.txt","w+");if(==
NULL||f==NULL)tfprintf("cannot open file\n"
{
);return0;
} // 利用ascii码进行字母统计 int
[
26
] character_num=0,}{;char[1000
] str;char[80
] temp;int=0
; awhile(!
feof())fgetsf(, {
80,temp);strcatf(,
);str}tempint=
strlen
( n);forstr(int
= 0; i < ;++ i ) nif (iisalpha
{
( [])str)itolower([
{
])str;i[([
character_num]-str97i)]++;}}// 输出统计结果
char
=
'a'
; characterprintf("the result:\n"
);for(int
= 0; i < 26; i ++ )printf (i"%c:%d "
{
,,[]character)character_num;i++;if
character((
+ 1)i%5==0)printf("\n"
{
);}}fclose
(
)
;fclosef()
;// 查找并替换此英文文本文件中某字符串tfchar[
1024
] buf=0},{[20]from,[20]to;printf("Input string you shall find:"
);scanf("%s"
,);printffrom("Input string you shall replace to:"
);scanf("%s"
,);// 把替换的串重新从English.txt读出、写入新文件temp.txtto=fopen
(
f"English.txt","r+");=fopen(
tf"temp.txt","w+");if(==
NULL||f==NULL)tfprintf("cannot open file\n"
{
);return0;
} while(
!
feof())fgetsf(,
{
sizeof(buf),)buf;strreplacef(,
,)buf;from//每一行都查找、替换目标串tofputs( ,
);bufmemsettf(,
0,bufsizeof());buf}fclose(
)
;fclosef()
;// // 把temp.txt内容写回English.txttf// f=fopen("English.txt","w+");// tf=fopen("temp.txt","r+");
// if(f==NULL||tf==NULL)
// printf("cannot open file\n");
// return 0;
// }
// {
//
// while(!feof(tf))
// {
// fgets(buf,sizeof(buf),tf);
// fputs(buf,f);
// memset(buf,0,sizeof(buf));
// }
//
// fclose(f);
// fclose(tf);
printf
(
"ok"
);return0;
} //自定义的字符串替换函数(所有出现的匹配串都替换为目标串)void
strreplace
(
char *,char * Src,char * From)int , To;{
char length_to*length_from,
* ,sf[1024se]endBuf=0};{=strlen(
length_from ) ;=Fromstrlen(
length_to ) ;/*
1.C 库函数 char *strstr(const char *haystack, const char *needle)
在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 'while';
2.C 库函数 char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制到 dest。
是把第二个字符串覆盖到第一个字符串上
3.C 库函数 void *memset(void *str, int c, size_t n)
复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。
4.C 库函数 void *memcpy(void *str1, const void *str2, size_t n)
从存储区 str2 复制 n 个字节到存储区 str1,覆盖原有部分数据
*/To(=
strstr
(,sf ) )// sf获得目标字符串的首地址 SrcifFrom(=={
NULL
)breaksf ; else// se获得末尾地址 ,也就是目标字符串后面字符的首地址
=+
;
{
strcpy
se ( sf , length_from)
;// 重置se endBufmemsetse(,
0
,strlense());// 正式替换字符串 endBufmemcpy(,
,
);sfmemcpyTo(length_to+,
,strlensf(length_to)endBuf);// 重置endBuf endBufmemset(,
0
,strlenendBuf());}endBuf}}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)