字符串处理的两个问题:删除指定字符,删除相邻相同的字符

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;
}

 

posted on 2010-04-17 20:25  DiaoCow  阅读(1134)  评论(0编辑  收藏  举报

导航