南开100题第11题疑问,求高手解答。。。。

☆题目11(无忧id 93 字符串字母移位题)
程序prog1.c的功能是:把 s 字符串中的所有字母改写成该字母的下一个字母,字母z改写成字母a。要求大写字母仍为大写字母,小写字母仍为小写字母,其它字符不做改变。
请考生编写函数chg(char *s)实现程序要求,最后调用函数readwriteDAT( )把结果输出到文件bc1.out中。
例如:s 字符串中原有的内容为:Mn.123Zxy,则调用该函数后,结果为:No.123Ayz。
注意:部分源程序存在文件prog1.c文件中。
请勿改动主函数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];
clrscr();
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("bc1.in", "r") ;
wf = fopen("bc1.out", "w") ;
for(i = 0 ; i < 50 ; i++) {
fscanf(rf, "%s", a) ;
chg(a) ;
fprintf(wf, "%s\n", a) ;
}
fclose(rf) ;
fclose(wf) ;
}
请问这样有什么错:int I;
for(I=0;I<strlen(s);I++)
if(s[i]=='z'||s[i]=='Z') s[i]-=25;
else if(s[i]>='a'&&s[i]<='y'||s[i] >='A'&&s[i]<='Y') s[i]+=1;
出现错误为:C:\Wexam\35010001\prog.c(10) : warning C4018: '<' : signed/unsigned mismatch
正确答案为:while(*s)
if(*s=='z'||*s=='Z') {*s-=25; s++;}
else if(*s>='a'&&*s<='y') {*s+=1;s++;}
else if(*s>='A'&&*s<='Y') {*s+=1;s++;}
else s++;

//在void chg(char *s)函数中,变量I全部大写即可。
void chg(char *s)
{
int I;
for(I=0;I<strlen(s);I++)
if(s[I]=='z'||s[I]=='Z') s[I]-=25;
else if(s[I]>='a'&&s[I]<='y'||s[I] >='A'&&s[I]<='Y') s[I]+=1;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-20
☆题目11(无忧id 93 字符串字母移位题)
程序prog1.c的功能是:把 s 字符串中的所有字母改写成该字母的下一个字母,字母z改写成字母a。要求大写字母仍为大写字母,小写字母仍为小写字母,其它字符不做改变。
请考生编写函数chg(char *s)实现程序要求,最后调用函数readwriteDAT( )把结果输出到文件bc1.out中。
例如:s 字符串中原有的内容为:Mn.123Zxy,则调用该函数后,结果为:No.123Ayz。
注意:部分源程序存在文件prog1.c文件中。
请勿改动主函数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];
clrscr();
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("bc1.in", "r") ;
wf = fopen("bc1.out", "w") ;
for(i = 0 ; i < 50 ; i++) {
fscanf(rf, "%s", a) ;
chg(a) ;
fprintf(wf, "%s\n", a) ;
}
fclose(rf) ;
fclose(wf) ;
}
请问这样有什么错:int I;
for(I=0;I<strlen(s);I++)
if(s[i]=='z'||s[i]=='Z') s[i]-=25;
else if(s[i]>='a'&&s[i]<='y'||s[i] >='A'&&s[i]<='Y') s[i]+=1;
出现错误为:C:\Wexam\35010001\prog.c(10) : warning C4018: '<' : signed/unsigned mismatch
正确答案为:while(*s)
if(*s=='z'||*s=='Z') {*s-=25; s++;}
else if(*s>='a'&&*s<='y') {*s+=1;s++;}
else if(*s>='A'&&*s<='Y') {*s+=1;s++;}
else s++;
相似回答