现在的位置: 首页 > 综合 > 正文

26 左旋转操作:把字符串前面的若干个字符移动到尾部

2018年01月20日 ⁄ 综合 ⁄ 共 810字 ⁄ 字号 评论关闭
/*
26.左旋转字符串
题目:
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
如把字符串 abcdef左旋转 2位得到字符串 cdefab。请实现字符串左旋转的函数。
要求时间对长度为n的字符串操作的复杂度为 O(n),辅助内存为 O(1)。

*/
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;

char* leftShift(char *str,int n)
{
	char *p=str+n;
	int i,len=strlen(str);

	while(*p!='\0')
		p++;
	i=0;
	while(i++<n)
		*p++=*str++;
	*p='\0';
	return p-len;
} 


char* leftShift2(char *str,int n)
{
	char p[100];
	int i,k,len=strlen(str);

	for(i=n,k=0;i<len;i++,k++)//左移n位,实际是到坐标n-1为止,新的从n开始
	 	p[k]=str[i];
	
	for(i=0;i<n;i++,k++)//剩下的n位,
	 	p[k]=str[i];
	 	
	return p;
} 

int main()
{
	char str1[]={"abcdef"};
	char str2[]={"aaabbcedfkk"};
	
	char str3[]={"abcdef"};
	int num=3;
	printf("%s左移%d位为:",str1,num);
	printf("%s\n",leftShift(str1,num));
	
	num=5;
	printf("%s左移%d位为:",str2,num);
	printf("%s\n",leftShift(str2,num));
	
	num=2;
	printf("%s左移%d位为:",str3,num);
	printf("%s\n",leftShift2(str3,num));
	
	return 0;
}

抱歉!评论已关闭.