2005 年11 月金山笔试题。编码完成下面的处理函数。 函数将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改变非'*'字符的先后顺序,函数返回串中字符'*'的数量。如原始串为:ab**cd**e*12,处理后为*****abcde12,函数并返回值为5。(要求使用尽量少的时间和辅助空间)
void main()
{
char *str ="abc**de**f";
int len = strlen(str);
char *str1 = (char*)malloc(len+1);
int k=0, i = 0;
whlie( str[i] != '\0' )
{
if(str[i] == '*' )
{
k++; //k个*
}
}
for(i =0 ;i<k ;i++)
{
str1[i] = '*'; //前k个值赋值为*
}
i =0;
while(str[i] != '\0')
{
if( str[i] != '*')
{
str1[k] = str[i];
k++;
}
}
str1[len] = '\0';
}