请讲解下fun函数内语句的意义,越详细越好。谢谢!

来源:百度知道 编辑:UC知道 时间:2024/05/13 12:20:33
#include <stdio.h>
#include <string.h>
void fun(char *a,int n)
{ char *p=a;int j=0;
while (*p) p++;p--;
while(*p=='*') p--;p++;
while (j<n&&*p)
{ p++;
j++;
}
*p=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);
}
这是一道编程题要求是:假定输入的字符串中只有字母和*号,只编写fun函数,它的功能是:使字符串尾部的*号不得多于n个;若多于n个,则删除多余的*号,否则什么也不做,字符中间和前面的*号不删除。
我觉得从后面开始遍历比从前面要好,谁能写个从后面遍历的啊?

#include <stdio.h>
#include <string.h>
void fun(char *a,int n)
{ char *p=a;int j=0; //定义字符型指针,和变量j
while (*p) p++; //当*p不是0就循环把指针定位到字符串的最后‘\0’
p--;前移一个落到最后的字符上
while(*p=='*') p--;//回到串尾的第一个*之前的位置
p++; 回到第一个*的位置
while (j<n&&*p)
{ p++;
j++;
} //数n个*
*p=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);
}

我认为这样就应该说算是从后面开始遍历,如果从最后面的*开始就无法实现删除n个*之前的*了,不,只能说实现起来就会十分麻烦!

耐着心思一点一点的仔细看,会慢慢理解的,还有你可以使用单步执行试试,看看程序运行的过程,边单步执行边查看屏幕显示就更明白了

这个函数的功能,就是从后面遍历的啊。

void fun(char *a,int n)
{
char *p=a;int j=0;

while (*p)
p++;//先把p移动到字符串的最后
p--;

while(*p=='*')
p--;//再把p移动到字符串尾部的*串的最前
p++;
<