问题描述:
/*
2005年11月金山笔试题。编码完成下面的处理函数。函数将字符串中的字符'*'移到串的前部分,
前面的非'*'字符后移,但不能改变非'*'字符的先后顺序,函数返回串中字符'*'的数量。
如原始串为:ab**cd**e*12,处理后为*****abcde12,函数并返回值为5。(要求使用尽量少的时间和辅助空间)
*/
/*
2005年11月金山笔试题。编码完成下面的处理函数。函数将字符串中的字符'*'移到串的前部分,
前面的非'*'字符后移,但不能改变非'*'字符的先后顺序,函数返回串中字符'*'的数量。
如原始串为:ab**cd**e*12,处理后为*****abcde12,函数并返回值为5。(要求使用尽量少的时间和辅助空间)
*/
- #include<iostream>
- using namespace std;
- int charBackward(char P[], int c_length)
- {
- int i=0, length=0;
- while(i<c_length)
- {
- if(P[i]=='*' && length==0){ i++; continue; }
- else if(P[i]=='*' && length!=0)
- {
- for(int j=i; j>i-length; j--)P[j]=P[j-1];
- P[i-length]='*';
- }
- else length++;
- i++;
- }
- return length;
- }
- int main()
- {
- int num;
- //char PC[]="ab**cd**e*12";
- char PC[]="abc***f**544******hhggs*ooo**************yd*";
- //char PC[]="***a";
- //char PC[]="*****";
- //char PC[]="aaba";
- //char PC[]="a*";
- //char PC[]="*b";
- cout<<"Before CharBackward, the string is:/n";
- cout<<PC<<endl;
- num=charBackward(PC, strlen(PC));
- cout<<"NOT * character nums: "<<num<<endl;
- cout<<"After CharBackward, the string is changed to:/n";
- cout<<PC<<endl;
- getchar();
- return 0;
- }