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

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

#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跳出第一个循环后进入不了第二个循环,输出结果只有前导的几个*号

应该是进入了第二个循环,但是第二个循环的结束条件和初始条件不对,初始条件要改为k=j,因为前一个循环已经让j变成了指向下一个字符位置,然后结束条件要改为k<y,因为是要判断整个字符串,所以结束条件仍然是要下标k小于字符串的长度y,(如果需要改变字符数组,可以看下 注释了的代码),修改如下:

#include<stdio.h>
void fun(char x[],int y)
{
    
    int j;
    for(j=0;j<y;j++)
    {
       
        if(*(x+j)!='*')break;//数组中遇到第一个字母就跳出循环
        printf("%c",*(x+j));
    }
    
    
    int k;
    for(k=j;k<y;k++)
    {    
        if(*(x+k)=='*')continue;//第一个字母后面若是*号则直接进入下一次循环
        else
        {
            printf("%c",*(x+k)); 
            
        }
        
    }
    
//     int j;
//     int index=0;  //用于记录可存入字符数组x中的字符的下标 
//    for(j=0;j<y;j++)
//    {
//       
//       
//        if(*(x+j)!='*')break;//数组中遇到第一个字母就跳出循环
//       // printf("%c",*(x+j));
//       
//       if(*(x+j)=='*'){  
//               index++;  //前导星号可以保留在字符数组x中,则index下标++ 
//       }
//    }
//    
//    
//    int k;
//    
//    for(k=j;k<y;k++)
//    {    
//        if(*(x+k)=='*')continue;//第一个字母后面若是*号则直接进入下一次循环
//        else
//        {
//            x[index]=*(x+k); //将当前字母存入字符数组相应位置 
//            index++;  //因为当前字符存入了字符数组相应的位置,则计数下标index++ 
//            //printf("%c",*(x+k)); 
//            
//        }
//        
//    }
//    x[index]='\0'; //结束复制移动字符后,在结尾加一个字符串结束字符空字符'\0',标志为处理后的字符串。 
                  
}

int main()
{
    int i=0;
    char ch;
    char a[1000];
    while((ch=getchar())!='\n')
    {
        *(a+i)=ch;
        i++;
    }
    fun(a,i);
   // printf("%s",a); //如果使用改变字符数组的办法,则打印这个改变后的字符数组 
    return 0;
 }  


img