1、,上机 替换字符 11 12 13 16 36 37 38 56 61 62 81 86 87,字符数组与字符串,void main() char a4=a,b,c,d;char b4=a,b,c,0;char b1=“china”;b1=“china”; ,a,b,b1是代表内存地址,二维字符数组,#include void main() char diamond5= , ,*,*, ,*,*, , , ,*, ,*, ,*, , ,*;int i,j;for (i=0;i5;i+) for (j=0;j5;j+)printf(%c,diamondij);printf(n); ,运行结果*
2、* * * *,二维字符数组,#include void main() char diamond5=“str1”,”str2”,”str3”;int i,j;for (i=0;i3;i+)printf(%s,diamondi);printf(n); ,运行结果,s,t,r,1,0,Diamond0是第0维数组的地址,s,t,r,2,0,Diamond1是第1维数组的地址,s,t,r,3,0,Diamond2是第2维数组的地址,与字符串处理的相关函数,字符串的输出 char c10=“test”; printf(“%s”,c); 字符串的输入 char c5; scanf(“%s”,c);,与字
3、符串处理的相关函数,加上#include 字符串的赋值函数 strcpy(字符数组名1,字符数组名2) char str110,str210=“china”; strcpy(str1,str2); str1=str2,表示把str2表示的字符串赋给str1 str1应足够大,是错误的,对单个字符处理函数加上头文件#include ,与字符串处理的相关函数,比较两个字符串的大小 strcmp(字符串1,字符串2)char str1=“china”;str2=“best”;if strcmp(str1,str2)printf(“str1str2”);求字符串长度函数strlen(字符串常量或字符数
4、组名) strlen(str1)返回字符串中字符个数不包括0,当字符串str1大于字符串str2 返回正整数 当字符串str1小于字符串str2 返回负整数 当字符串str1等于字符串str2 返回0,字符串的连接运算 char str120=“hello!; char str210=“china”; strcat(str1,str2); printf(“%s”,str1); Hello!china 输出字符串 printf(“%s”,str1)数组名 (地址) 输入字符串到字符数组 scanf(“%s”,str1),puts(str1) gets(str1),数组名,不是 str110,例
5、有3个字符串,要求找出其中最大者,程序如下: #include #include void main ( ) char string20;char str320;int i;for (i=0;i0) strcpy(string,str0)else strcpy(string,str1);if (strcmp(str2,string)0) strcpy(string,str2);printf(nthe largest string isn%sn,string); ,运行结果如下: CHINA HOLLAND AMERICA the largest string is HOLLAND,文件,打开文
6、件 读写操作(fscanf,fprintf)(fgets)针对字符串 关闭文件,文件打开读写实例,#include void main() int a10,i;FILE *in,*out;in=fopen(“in.dat”,”r”);out=fopen(“out.dat”,”w”);for(i=0;i10;i+)fscanf(in,”%d”, ,以读的方式打开 in.dat,以写的方式打开out.dat,从in所指文件依次读取 一个整型数据到ai,ai按指定格式写到 out所指文件中,char xx5080 ; unsigned int maxline = 0 ; /* 文章的总行数 */ i
7、nt ReadDat(void) FILE *fp ;int i = 0 ;char *p ;if(fp = fopen(“c:testIN.DAT“, “r“) = NULL) return 1 ;while(fgets(xxi, 80, fp) != NULL) p = strchr(xxi, n) ;if(p) *p = 0 ;i+ ;maxline = i ;fclose(fp) ;return 0 ; ,从文件中读取79个字符存入 xxi对应的一维数组中,并加上 0 如果遇到n,提前结束fgets的执行strchr函数在一维数组中查找指定字符 返回该字符的地址,void WriteD
8、at(void) FILE *fp ;unsigned int i ;fp = fopen(“c:testOUT.DAT“, “w“) ;for(i = 0 ; i maxline ; i+) printf(“%sn“, xxi) ;fprintf(fp, “%sn“, xxi) ;fclose(fp) ; ,类型三 替 换 字 符 题,替 换字符题,函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx
9、输出到文件PS10.DAT中。替代关系:f(p)=p*11 mod 256 (p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),计算后f(p)值小于等于32或大于130,则该字符不变,否则将f(p)所对应的字符进行替代。部分源程序已给出,原始数据文件存放的格式是:每行的宽度均小于80个字符。(11套),分析,本题要做三个步骤 1、从文件中读出每行数据存放在二维数组中 2、对二维数组的每行中的每个字符进行替换处理 3、把处理的二维数组重新写入文件,include #include unsigned char xx5080; int maxline=0;/*文章的总行数*
10、/ int ReadDat(void); void WriteDat(void);void encryptChar() void main() clrscr(); if(ReadDat() printf(“数据文件ENG.IN不能打开!n007“); return; encryptChar();WriteDat(); ,int ReadDat(void) FILE *fp; int i=0; unsigned char *p; if(fp=fopen(“eng.in“,“r“)=NULL) return 1; while(fgets(xxi,80,fp)!=NULL) p=strchr(xxi
11、,n); if(p)*p=0; i+; maxline=i; fclose(fp); return 0; void WriteDat(void) FILE *fp; int i; fp=fopen(“ps10.dat“,“w“); for(i=0;imaxline;i+) printf(“%sn“,xxi); fprintf(fp,“%sn“,xxi); fclose(fp); ,从文件中读出每行英文放于xx二维数组中,代码,void encryptChar() int i,j,t;for(i=0;imaxline;i+),实现encryptChar(),此函数无形参,实现二维数组每个字符的替
12、换 首先要取得二维数组的每个字符,可以使用两重循环来实现 对取得的字符进行替换,i,j分别是外循环和内循环变量, T存放转换后的数据,外循环 循环maxline行 对应数组第一维的下标,内循环 列数 对应数组第二维的下标,对数组第i行,第j列的字符进行替换,if (!(t130)xxij=t;,for(j=0;jstrlen(xxi);j+),t=xxij*11%256;,如果变换后的字符t的ASCII值不满足: 小于等于32或大于130 则对原字符进行替换 否则,不进行替换,函数ReadDat()实现从文件IN.DAT中读取一篇英文文章,存入到无符号字符串数组xx中;请编制函数encrypt
13、Char(),按给定的替代关系对数组xx中的所有字符进行替代,其替代值仍存入数组xx所对应的位置上,最后调用函数WriteDat()把结果xx输出到文件OUT.DAT中。替代关系:f(p)=p*11 mod 256, mod为取余运算,p是数组xx中某一个字符的ASCII值, f(p)是计算后无符号的整型值(注意:中间变量定义成整型变量), 如果原字符是数字字符0至9或计算后f(p)值小于等于32,则该字符不变,否则用f(p)替代所对应的字符。注意: 部分源程序存放在PROG1.C中, 原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格,并也按此替代关系进行处理。请勿改动主
14、函数main()、读数据函数ReadDat()和输出数据函数WriteDat() 的内容。(13套),字符替换其他形式(第13套),函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数ConverCharD(),其函数的功能是:以行为单位把字符串中的所有小写字母改写成该字母的上一个字母,如果是字母a,则改写成字母z。大写字母仍为大写字母,小写字母仍为小写字母,其他字符不变。最后把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件OUT4.DAT中。 例:原文:Adb.Bcdza abck.LLhj 结果:Aca.Bbcyz zabj.LLgi 原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。,if(xxij = a) xxij = z ;else if(xxij a ,