您的位置:首页 > 编程语言 > C语言/C++

实现字符串右移循环

2016-06-14 09:52 411 查看
题目描述:请实现字符串右移循环,如“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>





运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 函数