问答题
下列程序的功能是:把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++; /*让指针指向下一个字符*/
}
}
【答案解析】