88.2005 年 11 月金山笔试题。编码完成下面的处理函数。
函数将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改变非'*'字符的先
后顺序,函数返回串中字符'*'的数量。如原始串为:ab**cd**e*12,处理后为*****abcde12,
函数并返回值为 5。(要求使用尽量少的时间和辅助空间)
/* 88.2005 年 11 月金山笔试题。编码完成下面的处理函数。 函数将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改变非'*'字符的先 后顺序,函数返回串中字符'*'的数量。如原始串为:ab**cd**e*12,处理后为*****abcde12, 函数并返回值为 5。(要求使用尽量少的时间和辅助空间) 与快速排序的partition原理差不多 */ #include<iostream> #include<stdio.h> #include<string.h> using namespace std; void swap(char A[],int a,int b) { char temp=A[a]; A[a]=A[b]; A[b]=temp; } int partiStr(char str[]) { int len,i,k,sum; len=strlen(str); k=-1; sum=0; for(i=0;i<len;i++) { if(str[i]=='*') { k++; sum++; swap(str,k,i); } } return sum; } int main() { char a[]={"ab**cd**e*12"}; char b[sizeof(a)]; int num; printf("%s",a); num=partiStr(a); printf("处理后为:%s *的个数为:%d\n",a,num); return 0; }