所属年份:2010.9;2011.3;
规定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:将字符串中的前导*号全部移到字符串的尾部。
例如,字符串中的内容为:”*******A*BC*DEF*G****”,移动后,字符串中的内容应当是:”A*BC*DEF*G***********”。在编写函数时,不得使用C语言提供的字符串函数。
#include <stdio.h> void fun( char *a ) { } main() { char s[81]; int n=0; printf("Enter a string:\n");gets(s); fun( s ); printf("The string after moveing:\n");puts(s); }
【考点分析】
本题考查:移动字符串中指定字符的位置,一般采用while循环语句,通过指针型变量来完成。
【解题思路】
函数fun的功能:将字符串中的前导*号全部移到字符串的尾部。本题解题思路:(1)定义一个指针并指向字符串的首地址;(2)利用循环语句找出字符串的前导*号的个数n;(3)利用循环语句把剩余的字符拷贝到另一个字符串中;(4)在字符串的末尾接上n个*号。
【参考答案】
void fun( char *a ) { int i=0,n=0; char *p; p=a; while (*p=='*') /*判断*p是否是*号,并统计*号的个数*/ { n++;p++; } while(*p) /*将前导*号后的字符传递给a*/ { a[i]=*p;i++;p++; } while(n!=0) { a[i]='*';i++;n--; } a[i]='\0'; }
下面的程序体现了一个思想:近可能的使用 for 循环,只有在无法用for循环清晰表示的情况下才使用while循环
#include <stdio.h> void fun( char *a ) { int i, j, n=0; char *p; for (p=a; *p=='*'; p++) n++; for (i=0; *p; p++) a[i++] = *p; for (j=0; j<n; j++) a[i++] = '*'; a[i]='\0'; }