c语言 删除特定字符*

如题所述

#include<stdio.h>
int main()
{char s[]="***AB***CDE**12F***",*p,*p1,*q;
 for(p=s;*p=='*';p++); //p指向A 
 for(;*p!='*';p++); //p指向B后的* 
 for(q=p;*q;q++); //q指向串尾 
 for(q--;*q=='*';q--); //q指向F 
 for(p1=p;p<=q;p++) //复制中间非*字符 
   if(*p!='*')*p1++=*p; 
 for(;*p1++=*q++;);     //复制尾部*直到串尾符
 puts(s);
 return 0;  
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-12-01
#include<stdio.h>
void main() { char s[256],*p,*q;
  gets(s); p=q=s;
  printf("%s\n",s);
  if ( *p=='*' ) {
    while ( *q=='*' ) q++;
    while ( *q!=0 ) { *p=*q; p++; q++; }
    *p=0;
  }
  printf("%s\n",s);
}

第2个回答  2017-12-01
#include <stdio.h>

int main(void){
    // 创建原始字符串数组
    char * str[] = "***AB***CDE**12F***";

    // 创建临时字符串数组
    char * tmp[30] = {0};

    int i,j;//循环变量
    
    // 首先将头三个'*'字符储存到tmp的前三个字符
    for(i = 0;i < sizeof(str) ; ++i){
        if(i<3){
            tmp[j] = str[i];
            ++j;
        }
    /* 
    此处的 else if 判断中间部分的字符串是否有'*'
    存在,如果有,则跳过,只将不是'*'的字符保存
    到tmp中去
    */
    }else if(i >= 3 && i< sizeof(str)-4){
        if(str[i]!='*'){
            tmp[j] = str[i];
            ++j;
        }
    //将包括字符串最后的'\0'字符在内的四个字符
    //转存到tmp中
    }else{
        tmp[j] = str[i];
        ++j;
    }

    //将结果拷贝回原字符数组
    for(i = 0;i< sizeof(tmp) ; ++i){
        str[i] = tmp[i];
        if(tmp[i] == '\0')
            break;
    }
    return 0;
}

相似回答