去除字符串相邻相同的字符

OnMyWay2010 2010-03-08 11:12:12
今天看到一个题目:
怎么去除字符串中相邻相同的字符串?
如:aaaabbbbbccc111222333
去掉相邻相同的字符之后为:
abc123

有人这么写的:
char *unique(char *src)
{
char *p1 = src, *p2 = src;
if (NULL != src)
while((*p1 == *p2) ? *p2++ : (*++p1 = *p2++));
return src;
}

QQ群里有人说*++p1 = *p2++;这句有问题,说求值顺序不定
我觉得虽然写的有点晦涩,但是不存在副作用
请问大家觉得有问题没?
...全文
291 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
we_sky2008 2010-03-08
  • 打赏
  • 举报
回复
不过
while((*p1 == *p2) ? *p2++ : (*++p1 = *p2++));
中?后面的*p2++ 似乎没必要,只用p2++就可以了(但是编译会有警告)
我想作者可能是因为三元表达式的:前后类型应保持一致才这么写的吧
yyg990441 2010-03-08
  • 打赏
  • 举报
回复
*++p1 = *p2++;
没有问题:
主要是你这里p1和p2不一样,要是换成
*++p1 = *p1++;就有问题了,因为既可以先对*++p1求值也可以先对*p++求值
we_sky2008 2010-03-08
  • 打赏
  • 举报
回复
没问题嘛
我觉得这样写很正常的
就像strcpy的源码里也有类似这样的写法:
while(*dest++ = *src++);

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧