例题:输入一个字符串和一个整数,输出右移后的字符串。例如输入字符串str=“1234567”, 整型n=3,输出字符串str=“5671234”。
思想:step1.生成一个辅助数组temp[n]存放要前移的部分“567”。
step2.将没有前移的部分从后向前依次向后移动。str变成“1231234”。
step3.将辅助数组中的字符覆盖str前n位。str变成“5671234”。
char* Move(char *s, int n) { assert(s!=NULL); int length=strlen(s); if(n%length==0)//移动为长度的倍数相当于没移动 return s; char *t=s; char *temp=(char *)malloc(n); //t指针指向末尾最后一个字符 while(*t){ t++; } t--; //strlen函数实际上做了一次循环,这里其实可以用t-s+1得出length n=n%length; //将原字符串要提前的先储存进temp数组中 for(int i=0;i<n;i++) { temp[i]=*(t-n+1+i); } //将原字符串要往后挪的字符从后往前依次向后挪n个位置 for(int i=0;i<(length-n);i++){ *(t-i)=*(t-n-i); } //将temp数组中的字符串覆盖原字符串的前n个位置 for(int i=0;i<n;i++){ s[i]=temp[i]; } //释放堆内存 free(temp); return s; } int main(){ char str[100]=""; int n=0; scanf("%s %d",str,&n); Move(str,n); cout<<str; return 0; }