问答题
请编写函数fun,其功能是:判断t所指字符串中的字母是否由连续递增字母序列组成(字符串长度大于等于2)。例如字符串:uvwxyz满足要求;而字符串:uvxwyz不满足要求。
注意:部分源程序存放在PROG1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun指定的部位填入所编写的若干语句。
试题程序:
1 #include<stdio.h>
2 #include<string.h>
3 void NONO();
4 int fun(char *t)
5 {
6
7 }
8 main()
9 { char s[26];
10 printf("请输入一个字母组成的字符串;");gets(s);
11 if(fun(s))printf("%s是由连续字母组成的字符串./n",s);
12 else printf("%s不是由连续字母组成的字符串!/n",s);
13 NONO();
14 }
15 void NONO()
16 {/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/
17 FILE*fp,*wf;
18 int i;
19 char s[26],*P;
20 fp=fopen("c://test//in.
dat","r");
21 wf=fopen("c;//test//out.
dat"."w");
22 for(i=0;i<10;i++){
23 fgets(s,26,fp);
24 P=strchr(s,"/n");
25 if(P)*p=0;
26 if(fun(s))fprintf(wf,"%
s/n",s+2);
27 else fprintf(wf,"%s/n",
strrev(s));
28 }
29 fclose(fp);
30 fclose(wf);
31 }
【正确答案】
【答案解析】1 int fun(char*t)
2 {
3 int len=strlen(t);
4 if(len<2)
5 {
6 return 0;
7 }
8 char before_ch=t[0];
9 char current_ch;
10 int flag=l;
11 for(int i=l;t[i] !="
0";++i)
12 {
13 current_ch=t[i];
14 if(before ch!=current_ch-1)
15 {
16 flag=0;
17 break;
18 }
19 before ch=current ch;
20 }
21 return flag;
22 }
[解析]
函数fun的功能是判断指针t指向的字符串是否是由连续递增的字母构成,返回值为整数,0代表不满足条件。根据题目要求,字符串长度必须大于等于2,所以首先需要对t指向的字符串进行长度判断,小于2的字符串返回0。接着需要对字符串中的连续字符,逐个进行比较。C语言中字符变量可以当作整数使用,所以当前字符只有是前一个字符的ASCII码+1,才能说它们是连续递增字母序列,然后比较后一个字符与当前字符的ASCII码,如果字符串中的所有字符都满足条件,则返回1;否则说明该字符串不满足要求,此时设置flag=0,后面的字符也就不需要再比较了,跳出循环返回即可。