问题描述
函数将字符串中的字符'*'移到字符串的前部分,前面的非'*' 符后移,但不能改变非'*'字符的先后顺序,函数返回串中非'*'字符的数量。(要求尽可能的占用少的时间和辅助空间)。
例:原始串为au**toc**h**i*ps,处理后为*******autochips,函数返回9.
解题思路
1、首先最直接的办法是重新申请一个和原始串同样大小长度的空间,然后再从头遍历两次原始串。第一次遍历统计*号的个数,然后在新的字符串中就存储相同个数的*号,此时记住*之后的位置。第二次遍历原始串,若字符不等于*就将字符拷给新串。这样将新串中的内容复制到旧串中,然后将新串内存释放。即实现了*的前移,在遍历过程中也统计了非*的个数。
2、上述方法的代价过于大,我们可以在原始串中进行操作。
(1)让i,j指向串尾,str[i]!='*'时,i一直等于j;
(2)当str[i]='*'时,i执行减1操作&#