问答题 下列程序的功能是:把s字符串中的所有字母改写成该字母的下一个字母,字母z改写成字母a。要求大写字母仍为大写字母,小写字母仍为小写字母,其他字符不做改变。 请编写函数chg(char*s)实现程序要求,最后调用函数readwriteDAT()从in.dat文件中读取50组数据,分别得出结果,且把结果输出到out.dat文件中。 例如,s字符串中原有的内容为Mn.1232xy,调用该函数后,结果为No.123Ayz。 注意:部分程序已经给出。 请勿改动主函数main()和输出数据函数readwriteDAT()的内容。 #include <conio.h> #include <string.h> #include <stdio.h> #include <ctype.h> #define N 81 void readwriteDAT(); void chg(char *s) { } main() { char a[N]; printf("Enter a string: "); gets(a); printf("The original string is: "); puts(a); chg(a); printf("The string after modified: "); puts(a); readwriteDAT(); } void readwriteDAT() { int i; char a[N]; FILE *rf,*wf; rf=fopen("in.dat","r"); wf=fopen("out.dat","w"); for(i=0;i<50;i++) { fscanf(rf,"%s",a); chg(a); fprintf(wf,"%s/n",a); } fclose(rf); fclose(wf); }
【正确答案】void chg(char *s) { while(*s) /*若s所指字符不为0(即字符串结束标志)则循环*/ { /*若s所指字符是字母'z'或'Z',则让它自减25(即改为'a'或'A')*/ if (*s=='z' || *s=='Z') *s-=25; /*否则如果s所指字符是其他字母,则让它自增l(即改为其下一个字符)*/ else if (isalpha(*s)) *S+=1; s++; /*让指针指向下一个字符*/ } }
【答案解析】