字符串处理的两个问题:删除指定字符,删除相邻相同的字符
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)
还是利用squeeze()函数中的技巧,我们可以这样写:
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;
}