c语言程序怎么修改啊?

假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部移到字符串的尾部。例如,字符串中的内容为:*******A*BC*DEF*G**... 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部移到字符串的尾部。
例如,字符串中的内容为:*******A*BC*DEF*G****,移动后,字符串中的内容应当是:A*BC*DEF*G***********。在编写函数时, 不得使用C语言提供的字符串函数。
注意: 部分源程序在文件PROG1.C文件中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h>
void fun( char *a )
{
int i=0,j=0,k;
while(a[i]=='*')
{
i++;
}
k=i;
for(;a[i]!='\0';j++,i++)
{a[j]=a[i];
}
for(i=0;i<=k;i++,j++)
{ a[j]='*';
a[j]='\0';
}

}

main()
{ char s[81],*p; int n=0;
printf("Enter a string:\n");gets(s);
fun( s );
printf("The string after moveing:\n");puts(s);

}
为什么不能实现????
展开
 我来答
zhangxiafei521
2012-03-23 · TA获得超过188个赞
知道答主
回答量:69
采纳率:0%
帮助的人:47.1万
展开全部
两处错误
for(i=0;i<=k;i++,j++) // i 不应该=k 循环条件应该是 i < k
{ a[j]='*';
a[j]='\0'; // 这句不应该出现在循环体内,应该是在循环结束后
}
沧海雄风2009
2012-03-22 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8525
采纳率:79%
帮助的人:2845万
展开全部
The string after moveing:
A*BC*DEF*G************
Press any key to continue

void fun( char *a )
{
int i=0,j=0,k;
while(a[i]=='*' && a[i+1]=='*')
{
i++;
}
i++;
k=i;
for(;a[i]!='\0';j++,i++)
{
a[j]=a[i];
}
for(i=0;i<=k;i++,j++)
{
a[j]='*';

}
a[j]='\0';
}
追问
为什么我不对啊
追答
Enter a string:
*******A*BC*DEF*G****
The string after moveing:
A*BC*DEF*G************
Press any key to continue

#include
void fun( char *a )
{
int i=0,j=0,k;
while(a[i]=='*')
{
i++;
}
k=i; //这里原来我上面加了个i++ 去掉不要了
for(;a[i]!='\0';j++,i++)
{a[j]=a[i];
}
for(i=0;i<=k;i++,j++)
{
a[j]='*';
}
a[j]='\0'; //这个记得放在大括号外 把大括号不要省略 是个很重要的习惯
}

main()
{
char s[81],*p; int n=0;
printf("Enter a string:\n");
gets(s);
fun( s );
printf("The string after moveing:\n");puts(s);
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
el...3@21cn.com
2012-03-22
知道答主
回答量:14
采纳率:0%
帮助的人:5.9万
展开全部
1 #include <stdio.h>
2 void fun( char *a )
3 {
4 int i=0,j=0,k;
5 char tmp;
6
7 while(*a == '*')
8 {
9 tmp = *a;
10 i = 0;
11 for (; a[i] != '\0'; i++)
12 {
13 a[i] = a[i + 1];
14 }
15 a[i - 1] = tmp;
16 }
17
18 }
19
20 main()
21 {
22 char s[81] = "*******A*BC*DEF*G****";
23 char *p;
24 int n=0;
25 printf("Enter a string:\n");
26 //gets(s);
27 printf("The string before moveing:\n");puts(s);
28 fun( s );
29 printf("The string after moveing:\n");puts(s);
30
31 }
32

你那个逻辑有问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
predictorwy
2012-03-23
知道答主
回答量:20
采纳率:0%
帮助的人:23.9万
展开全部
#include <stdio.h>
void fun( char *a )
{
int i=0,j=0,k;
while(a[i]=='*')
{
i++;
}
k=i;
for(;a[i]!='\0';j++,i++)
{a[j]=a[i];
}
for(i=0;i<=k;i++,j++)(此处应为i<k)
{ a[j]='*';
a[j]='\0';(这个语句应该放在这个FOR循环外边,不然的话每次循环都会把a[j]的值赋为'/0')
}

}

就这两处,改完运行是对的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式