问答题 程序test.c的功能是:把s字符串中的所有字母改写成该字母的下一个字母,字母z改写成字母a,字母Z改写成字母A,其他字符不做改变。
请考生编写函数chg(char*s)实现程序要求,最后调用函数readwriteDAT()把结果输出到文件out.dat中。
例如:s字符串中原有的内容为:Mn.123Zxy,则调用该函数后,结果为:No.123Ayz。
请勿改动数据文件in.dat中的任何数据、主函数main()和输出数据函数readwriteDAT()的内容。
#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 ();
}
/*从文件in.dat中读入字符串赋给字符串变量a,调用函数chg(a)对字符串按照题目的要求进行处理,并把处理结果写入到文件out.dat中*/
void readwriteDAT()
{
int i;
char a [N];
FILE *rf, *wf;
rf=fopen("in.dat", "r");
wf=fopen("out.dat", "w");
for(i=0; i<10; i++)
{
fscanf(rf, "%s", a);
chg (a);
fprintf(wf, "%s\n", a);
}
fclose(rf);
fclose(wf);
}
【正确答案】
【答案解析】char *p=s, ch;
while(*p) //当字符*p非空时
{
ch=*p; //把字符*p赋给字符ch
if(isalpha(ch) &&ch!="z" && ch!="z") //如果字符ch不是字母"z"或者"z"时
*p=ch+1; //把字母ch改成其下一个字母
else if(ch=="z") //如果字母ch是字母"z"
*p="a"; //则把其改成字母"a"
else if(ch=="z") //如果字母ch是字母"z"
"p="A"; //则把其改成字母"A"
p++; //字符指针变量p加1,对字符串s的下一个字符进行处理
} [解析] 把str字符串中的所有字母改写成该字母的下一个字母。
①定义局部字符变量ch和字符指针变量p,并使其指向字符串s。
②当p所指的字符非空时,把字符*p赋给字符ch,当字符ch不是字母"z"或者"Z"时,把字符ch的ASCII码值加1,变成其下一个字符的ASCII码,并把这个值赋给字符*p,否则,如果字符ch是字符"z",则把字符*p的设置为字符"a",否则,如果字符ch是字符"Z",则把字符*p的设置为字符"A",字符指针变量加1,使其指向字符串s的下一个字符,在下一次循环中处理。