算法题目:字符串重组
输入:****a * b * c*.....
输出:*******abc.....
将所有的*都移动到字符串的前半部分,字符移动到后半部分,保证字符的顺序。
思路:
要保证字母的顺序不能发生变化,可以从后向前遍历字符串,遇到字母时,就把它往后移动,这样,最终所有的字母都在后面,可往后移动到哪里呢?
可以设置一个标识位index,这个index表示这个位置可以放字母,一旦放了字母,index减1,这样,字符串比例结束后,index当前的位置,以及前面的位置都应该放置*
void rebuild(char* chr)
{
int iLen = strlen(chr);
int index = iLen-1;
// 从后向前遍历,如果当前元素不是*,就把当前元素放到index的位置上
for(int i = index;i>=0;i--)
{
char c = chr[i];
if(c!='*')
{
chr[index--] = c; // index的位置上被设置为字母后,向前走一步,那是下一个可以放字母的地方
}
}
for(int i = 0;i<=index;i++)
{
chr[i] = '*';
}
}