16、2005年11月金山笔试题。编码完成下面的处理函数。函数将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改变非'*'字符的先后顺序,函数返回串中字符'*'的数量。如原始串为:ab**cd**e*12,处理后为*****abcde12,函数并返回值为5。(要求使用尽量少的时间和辅助空间)
答案来自互联网,具体出处忘了
最高效算法:
int change1(char *str)
{
int i,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;
}