c语言删除字符串中所有连续相同的字符

对每个字符串做如下处理:删除字符串所有连续相同的字符,然后输出该字符串。

要求:使用函数void del_samechar(char str[])实现对字符串str中所有连续相同的字符的删除。

例:输入:room 输出:rm

  输入:aabaaama    输出:bma

程序的必要代码为:

main()

{ char str[100];

gets(str);

 del_samechar(str);

 puts(str);

}



void del_samechar(char str[])
{
   int i,j,k,m=100;
  for(i=0,j=1;str[i]!='\0'; )      //循环退出条件为检测到空值(即字符串末尾的'/0'); 
  {
    if(str[i]==str[i+1])
    {
      j++;
      i++;
    }
    else if(str[i]!=str[i+1])
    {
      if(j>1)                         //相同元素个数大于1 
      {
        for(i=i-(j-1),k=i;i<m-j;i++)  //i从第一个相同元素下标开始 ,k记录初始位置 
        {
          str[i]=str[i+j];            //让相同元素的值变为多个相同元素后 第一个不同元素的值 
        }
        i=k;                         //回到初始状态 
        j=1;                         //回到初始状态 
      }
      else                           //正常情况 
        i++;  
    }
  }
}

全指针处理

#include <stdio.h>

void del_samechar(char *str)
{
    char *p = str+1;
    char *q = str;
    while(*p != '\0')
    {
        if(*p != *q && p-q>1)
        {
            int t = p-q;
            while(*p != '\0')
            {
                *(p-t) = *p;
                p++;
            }
            *(p-t) = 0;
            p = q+1;
            continue;
        }
        if(*p != *q)
            q=p;
        p++;
    }
    if(p-q>1)
        *q= 0;
}
int main()

{ 
    char str[100];

    gets(str);

    del_samechar(str);

    puts(str);
    return 0;
}