2005年金山笔试题。编码完成如下处理函数:函数将字符串中的字符‘*’移动到字符串的前部分,前面的非‘*’字符后移,但是不能改变非‘*’字符的先后顺序,函数返回字符串中字符‘*’的个数。例如,输入字符串为:ab**cd**e*12,处理之后字符串为*****abcde12,函数返回5.(要求使用尽量少的时间和辅助空间)
#include <iostream>
#include <cstdlib>
using namespace std;
int changle(char* str);
int main()
{
char str[] = "ab**cd**e*12";
cout<<"str = "<<str<<endl;
cout<<"str = "<<str<<" count = "<<changle(str)<<endl;
cout<<"press any key to continue...";
getchar();
}
int changle(char* str)
{
int i;
int j = strlen(str) - 1;
for (i = j; j >= 0; j--)
{
if (str[i] != '*')
{
i--;
}
else if (str[j] != '*')
{
str[i] = str[j];
str[j] = '*';
i--;
}
}
return i + 1;
}