题目描述:请实现字符串右移循环,如“abcdefghi”右移3位变为“defghiabc”. 实现方法:
1.三步翻转法
代码实现如下:
<span style="font-size:24px;color:#666600;">
<span style="font-size:18px;color:#cc33cc;">#include<stdio.h>
#include<assert.h>
#include<string.h>
void reverse(char *left,char* right)
{
assert(left);
assert(right);
while(left<right)
{
char tmp=*left;
*left=*right;
*right=tmp;
left++;
right--;
}
}
void RightLoopMove(char* pStr,unsigned short steps)
{
int len = strlen(pStr);
reverse(pStr,pStr+steps-1);//逆序左串
reverse(pStr+steps,pStr+len-1);//逆序右串
reverse(pStr,pStr+len-1);//逆序整个字符串
}
int main()
{
char arr[]="abcdefghi";
int sz=sizeof(arr)/sizeof(arr[0]);
RightLoopMove(arr,3);
printf("%s\n",arr);
system("pause");
return 0;
</span></span>
<span style="font-size:18px;color:#cc33cc;"><span style="font-size:24px;color:#666600;">}</span></span>
2.暴力翻转法:
<pre name="code" class="cpp"><pre name="code" class="cpp">
<pre name="code" class="cpp"><span style="font-size:18px;color:#cc33cc;">//#include<stdio.h>
//#include<assert.h>
//#include<string.h>
//void RightLoopMove(char* pStr,unsigned short steps)
//{
// int len=strlen(pStr);
// int cou=0;
// assert(pStr);
// /*steps=steps%len;*/
// while(steps--)
// {
// char tmp=pStr[0];
// for(cou=0;cou<len-1;cou++)
// {
// pStr[cou]=pStr[cou+1];//
// }
// pStr[cou]=tmp;
// }
//}
//
//int main()
//{
// char arr[]="abcdefghi";
// RightLoopMove(arr,3);
// printf("%s\n",arr);
// system("pause");
// return 0;
//}
</span>
运行结果: