填空题 请补充函数fun(),该函数的功能是:把一个字符串中的字符(字母)按从小到大排序,并把这个全部由字母组成的字符串保存在原串中,函数返回这个字符串的长度。例如;输入“cixbr2.3”,如果为bcirx,字符串长度为5。 注意:部分源程序给出如下. 请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。 #include <stdio.h> #define N 20 int fun (char *str) { int i=0,j=0,k=-0,m=0; char t; char *p=str; while(*p) { if((*p>='A'&&*p<='Z')||(*p>='a' &&*p<='z')) {{U}} 【1】 {{/U}} p++; } *(str+i)='/0'; {{U}}【2】 {{/U}}; while(*(p+j)) { k=j; {{U}} 【3】 {{/U}}; while (*(p+k)) { if(*(p+k)<*(str+m) { t=*(str+m); *(str+m)=*(p+k); *(p+k)=t; } k++; } j++; } return i; } main() { char str[81]; iht n; clrscr(); printf("Input the original string "); gets(str); printf("*** The Original string ***In"); puts(str); printf("*** The nwe string ***/n"); n=fun(str); puts(str); printf("***The length of new string is: %d***/n",n); }
  • 1、
【正确答案】 1、[1] *(str+i++)=*p [2] p=str [3] m=j    
【答案解析】[解析] 填空1:将字符串中的字母字符存入原字符串str中,通过变量i的自加逐一向后移动字符串指针。填空2:从后面的程序中可以看出,通过指针p对字符串进行排序,所以应使指针p指向字符串str的首部,即将字符串str的首地址赋给p。填空3:本题采用选择法对字符串进行排序,选择法的思路是,假设从小到大排序,依次用当前取得的元素和它后面的所有元素进行比较,在第一个元素和它后面的元素顺次比较时,可以借助中间变量来对两数进行交换,要保证这第一个元素始终存放数组中的最小数,以后依次挑出次小数,这样最终的数组就是按从小到大的顺序排列。此处要将变量j的值赋给m。