假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导的*号之外,将串中其他*号全部删除。在编写函数时,不得使用c语言提供的字符串函数。

假定输入的字符串中只包含字母和号。请编写函数fun,它的功能是:除了字符串前导的号之外,将串中其他*号全部删除。在编写函数时,不得使用c语言提供的字符串函数。如 * * * A B * * C * * * 改为 * * * ABC

#include
#include
void fun(char x[],int y)
{
    int j;
    for(j=0;jif(*(x+j)!='*')break;//当检测到第一个字母时跳出循环,进入下一个
        printf("%c",*(x+j));
    }
    
    
    int k;
    for(k=j+1;kif(*(x+k)=='*')continue;//若字符串为*,则直接进入下一个循环
        else
        {
            printf("%c",*(x+k)); //若字符串为字母,则直接打印
            
        }
        
    }    
}
int main()
{
    int i=0;
    char ch;
    char a[1000];
    while((ch=getchar())!='\n')
    {
        *(a+i)=ch;
        i++;
    }
    fun(a,i);
    return 0;
 } 

问函数fun的第一个循环跳出后进入不了下一个循环,为什么?结果只有前导的*号。

对照

img


#include<stdio.h>

void fun(char x[],int y)
{
    int j;
    for(j=0;j<y;j++)
    {  
        if(*(x+j)!='*') //当检测到第一个字母时跳出循环,进入下一个
           {
           goto xs; 
           }
        printf("%c",*(x+j));
    }
  
    
    int k;
    xs:for(k=j;k<y;k++)
    {    
        if(*(x+k)=='*')//若字符串为*,则直接进入下一个循环
        {
        continue;
        }
        else if(*(x+k)!='*' && *(x+k)!='\n')
        {
            printf("%c",*(x+k)); //若字符串为字母,则直接打印
            
        }
        
    }    
}
int main()
{
    int i=0;
    char ch;
    char a[1000];
    printf("请输入字符串:"); 
    while((ch=getchar())!='\n')
    {
        *(a+i)=ch;
        i++;
        
    }
    printf("得到的新字符:"); 
    fun(a,i);
    return 0;
 }