编写函数fun,其功能是:删除字符串中所有*号

void fun( char *a )
{
int i,j=0;
for(i=0;a[i]!='\0';i++)
if(a[i]!='*')
a[j++]=a[i];
a[j]='\0';
}
这是第一种,可以运行。但我用while函数却不行,按回车什么都没有。
void fun( char *a )
{
int i,j=0;
while(a[i]!='\0')
if(a[i]!='*')
a[j]=a[i];
j++;
i++;
a[j]='\0';
}
希望各位大神帮忙解决一下问题!

第1个回答  推荐于2016-07-24
int i,j=0;

i 没有付初值,if 需要{}

void fun( char *a )
{
int i,j=0;
while(a[i]!='\0')
if(a[i]!='*') {
a[j]=a[i];
j++;
}
i++;
a[j]='\0';
}本回答被提问者采纳
第2个回答  2023-03-10

char a 是 C 中的 char 类型指针,这意味着它可以存储字符或字符数组的地址。在您的第一个函数中,您使用 for 循环遍历 a 中的字符,并将它们复制到另一个位置(如果它们不是 '')。在您的第二个函数中,您使用 while 循环做同样的事情,但有两个问题:

    您在使用它作为 while 条件之前没有初始化 i。这意味着 i 可能有任何随机值,并导致未定义行为。

    您没有在 if 块内递增 j 和 i。这意味着您总是将 a[i] 复制到 a[0] 并且永远不会向前移动。

    要修复您的第二个函数,您需要做类似于以下操作:

    void fun( char a ) { int i=0,j=0; // 初始化 i while(a[i]!=‘\0’) { if(a[i]!='‘) { a[j]=a[i]; j++; // 递增 j } i++; // 递增 i } a[j]=’\0’; }

第3个回答  2018-05-11

void fun( char *a )

{

int i=0,j=0;

while(a[i]!='\0')

{if(a[i]!='*') 

a[j++]=a[i];

i++; }

a[j]='\0';

}