从字符串中删除不同时出现在c中的字符

  • 本文关键字:字符 字符串 删除 string
  • 更新时间 :
  • 英文 :


例如,给定字符串str1 = "120jdvj00ncdnv000ndnv0nvd0nvd0"和字符ch = '0',输出应该是12jdvj00ncdnv000ndnvnvdnvd。也就是说,0只在单独出现的地方被移除。这段代码不能运行

#include<stdio.h>
char remove1(char *,char);
int main()
{
  char str[100]="1o00trsg50nf0bx0n0nso0000";
   char ch='0';
   remove1(str,ch);
   printf("%s",str);        
   return 0;
}
char remove1(char* str,char ch)
{  
  int j,i;
  for(i=0,j=0;i<=strlen(str)-1;i++)
  {
    if(str[i]!=ch)
    {
     if(str[i+1]==ch)
     continue;
 else
   str[j++]=str[i]; 
 }
}
  str[j]='';
}

您的代码查找要删除的字符以外的其他内容,如果下一个字符是要删除的字符,则跳过(即不保留它刚刚看到的字符),否则它复制当前字符。因此,如果它看到'a0'并且正在寻找'0',它将忽略'a'。

您可以做的是复制除感兴趣的字符以外的所有字符,并在每次看到其中一个字符时将计数器设置为0(表示此时您看到的感兴趣的连续字符的数量)。当你找到一个感兴趣的增量计数。现在,每当您发现一个不感兴趣的字符时,如果计数为1(因为这是您想要删除的单个字符),则不做任何操作,或者将感兴趣的字符的多个实例放入str中,如果count> 1。

确保您处理了字符串以要删除的字符的连续运行结束的情况,并且您应该没有问题。

char *remove1(char* str, char ch){
    char *d, *s;
    for(d = s = str;*s;++s){
        if(*s == ch){
            if(s[1] == ch)
                while(*s == ch)
                    *d++=*s++;
            else
                ++s;//skip a ch
            if(!*s)break;
        }
        *d++ = *s;
    }
    *d = '';
    return str;
}

复制基本

的代码
for(d = s = str;*s;++s){
    *d++ = *s;
}
*d = '';

需添加特殊处理

for(d = s = str;*s;++s){
    if(find a character that is specified){
        Copy that in the case of continuously than one character
        if one letter then skip
    }
    *d++ = *s;
}
*d = '';

下面是工作代码 输出为:" 1000trsg5nfbxnnso0000 "

#include<stdio.h>
char remove1(char *,char);
int main()
{
        char str[100]="1o00trsg50nf0bx0n0nso0000";
        char ch='0';
        remove1(str,ch);
        printf("%s",str);    
        return 0;
}
char remove1(char* str,char ch)
{  
        int j,i;
        int len = strlen(str);
        for(i = 0;i < (len - 1);i++){
                if(str[i] == ch){
                        /* if either of check prev and next character is same then contd. without removal   */
                        if((str[i+1] == ch) || (str[i-1] == ch))
                                continue;
                        /* replacing the char and shifting next chars left*/
                        for(j = i;j < (len - 2);j++) {
                                str[j] = str[j + 1];
                        }
                        /* string length is decrementing due to removal of one char*/
                        len--; 
                }
        }
        str[len] = '';
}

最新更新