C语言的题目,规定输入的字符只包含字母和*号。请编写函数fun,功能是:将字符串中的前导*全删除,

C语言的题目,规定输入的字符只包含字母和*号。请编写函数fun,功能是:将字符串中的前导*全删除,中间和尾部的*不删除。下面是答案,可我看不大懂,两个while?还有P++?谁能具体解释下过程?

1、其实头函数每个都需要用到的就是#include <stdio.h>.在这儿给大家说的就是这里需要添加一个字符串函数,因为程序里面涉及到了输出和输入字符串以及字符。#include <string.h>。

2、定义两个相同容量的字符串储存的变量 char a[100];  char b[100];。以及整数变量 int c;  int i=0,j=0; 其中a[100]是存字符串的,b【100】是存你删除对应字符的字符串的,整数C是你想删除第几位。j ,i 是后面for循坏中要使用到的变量。

3、 printf("请输入你的字符串");  scanf("%s",a);  printf("请输入你想要删除第几位字符");  scanf("%d",&c)。

4、 for(i=0;i<strlen(a);i++)  {       if(i+1!=c)       {        b[j]=a[i];        j++;       }                  }          printf(" %s",b);        }    。

5、  这几行代码逻辑语句是:只要当i+1不等于c时把a【i】里面的字符赋给b【i】,那么这样当i+1=c时不把它赋给b【i】从而实现删除功能。

6、最后完整的看一下整体的一个代码流程。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-02-27
第一个while循环是当p指向的字符是*时进行循环,p++就是让指向字符数组的指针指向下个单元。类似对数组进行for循环遍历输出的控制循环变量i++。然后p指向下一个字符,最后让指针p指向字符数组a中第一个非*的字符。
比如a中的字符是“***a**bcd*”,那么第一个while循环后,p指向字符a中第四个字符中'a';如果a中字符是“e*bcd*”,那么第一个while循环后,p指向a中第一个字符'e'。
第一个while循环后,然后就把p位置的字符依次在往字符数组a中赋值。如果a中是“***a*bc*”,第一个while后p指向'a',所以此时就把'a'赋值给a【0】,取代了原本在a【0】中的*。然后一直循环到a中最后一个字符,最后循环完成后在末尾加上空字符'\0'。实现了去掉字符数组中首端*号的功能!本回答被提问者和网友采纳
第2个回答  2014-09-13
#include<stdio.h>
#include<string.h>
char *del(char *a)
{
while (*a == '*') a++; // a是指针 *a是当前字符 如果字符是‘*’ a++表示 a指向下一个字符 然后 // 做比较 至于答案的拷贝完全多余 只需要在原串的不同位置指向就好
// 因为只是 删前导 而不动中间 或者 尾部字符

return a;
}
int main()
{
char a[100]={"*************skafjdlskjfla8********"};
char *newstr;
newstr = del(a);
printf("%s\n",a);
printf("new string :\n%s\n",newstr);
return 0;
}
第3个回答  2018-02-27
第一个while(*p=='*')p++;
这个补全就是
while(*p=='*')
{
    p++;
}
就是从前面开始等于*的直接指针后移
把前面的*全部略过
while(*p)
{
    a[j++]= *p;
    p++;
}
然后从第一个不是*的开始逐位赋值给字符数组a
最后手工添加结束符

第4个回答  推荐于2016-01-09
#include<stdio.h>
#include<string.h>

void fun(char *str)
{
int len=(signed)strlen(str);
for(int i=0;i<len;i++)
{
if(*(str+i)=='*')
{
continue;
}
else
{
for(int j=0;j<len-i;j++)
*(str+j)=*(str+j+i);
*(str+j)='\0';
return;
}
}
}

void main()
{
char str[]={"****132sfs**wefsf**"};
fun(str);
printf("%s\n",str);
}本回答被网友采纳