题目:
假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串的前导*号不得多于n个;
若多于n个,则删除多余的*号;若少于或等于n个,则什么也不做,字符串中间和尾部的*号不删除。
例如,若字符串中的内容为*******A*BC*DEF*G****,假设n的值为4,删除后,
字符串中的内容则应当是****A*BC*DEF*G****;若n的值为8,则字符串中的内容仍为*******A*BC*DEF*G****。
n的值在主函数中输入。在编写函数时,不得使用C语言提供的字符串函数。
#include <stdio.h>
#include <conio.h>
void fun( char *a, int n )
{
/* k用于计数前导*号的个数,所以初始化为0 */
int i=0,k=0;
/* 将t指针指向a所指字符串的第一个字符 */
char *t=a;
/* 以下while循环将统计前导*号的个数,k计数前导*号的个数 */
while ( *t =='*')
{
k++ ;
t++ ;
}
/* 将t重新指向a字符串的第一个字符 */
t=a;
/* 如果前导*号的个数k大于规定的*号个数n,则将t指向第n+1个前导*号 */
if (k>n)
/* a+k-n表示从a字符串第一个字符位置加上k然后减去n得到的位置 */
t=a+k-n ;
/* while ( *t )是while ( *t !='\0' )的简写方式 */
/* 从t指向的剩下的前导*号开始到字符串尾部的字符全部拷贝到字符串前面 */
while ( *t !='\0' )
{
a[i] = *t ;
i++;
t++ ;
}
/* 在所有拷贝到a数组前面的字符后面位置设置字符串结束标记'\0' */
/* 这样就能切断后面多余的字符,从而形成一个新的字符串 */
a[i] = '\0' ;
}
main()
{
char s[81];
int n;
printf("Enter a string:\n");
gets (s);
printf("Enter n: ");
scanf ("%d",&n);
fun( s,n );
printf("The string after deleted:\n");
puts(s);
}