字符串中的删除操作

1.删除指定字符

该方法是《The C programming language》中的一个例子,写的很巧妙,原地删除,没有多用额外的存储空间。

void squeeze(char *s , int c)
{
    int i , j;
    for(i = j = 0 ; s[i] ; i++)
    {
        if(s[i] != c)    
            s[j++] = s[i];
    }
    s[j] = '\0';
}
2.删除相邻相同的字符

例如:abbc -> ac    

        abccbdeffeg ->  adg

考虑可以采用1中的思想

void squeeze(char *s)
{
    int i , j , c , len;   //c为当前也许要插入的字符
    c = s[0]; len = strlen(s);
    for(i = 1 , j = 0 ; i <= len; i++)
    {
        if(s[i] == c)
        {
            c = j > 0 ? s[--j] : s[++i];
        }
        else
        {    
            s[j++] = c ;
            c = s[i] ;
        }
    }
    s[j] = c;
}