网友问我的计算机二级的一个考试题目,由于很久没有好好地学习和使用C++了,都快忘记的差不多了,趁这个当口练习一下,温习一下。
题目是这样的:
假定输入的字符串中只包含‘*’和字母,编写一个函数,将字符串中的前导‘*’移动到字符串的最后面,例如输入字符串为“***A*B**C*D**”,则经过函数操作之后,前导的三个’*‘移动到字符串最后,变为“A*B**C*D*****”。
我的代码如下:
#include <iostream> #include <string.h> using namespace std; void PickChars(char* a); int main() { char s[81]="*****ASKDHFKSHF***ASDAH*"; int n=0; PickChars(s); cout<<s<<endl; return 0; } void PickChars(char* a) { char *p,*q; int n=0; p=a; while(*p=='*') /* 统计串头'*'个数n */ {n++; p++;} q=a; //your code here ////////////////////////////////////////// while(*p!='\0') *q++=*p++; ////////////////////////////////////////// for(;n>0;n--) /* 在串尾补n个'*' */ *q++='*'; *q='\0'; }
事实上我一开始还把题目看错了,误以为是把所有的‘*’都移动到后面去,字母提前,但是相对顺序不变,这个要求稍显麻烦,不过也不是太难,下面是实现该要求的函数。
void PickChars(char* a) { char *p,*q; int n=0; p=a; q=a; while(*p!='\0') { if(*p!='*') *q++=*p++; else { p++; n++;//统计所有的‘*’ } } for(;n>0;n--)/* 在串尾补n个'*' */ *q++='*'; *q='\0'; }
评论