左旋字符串

字符串左旋算法实现
本文介绍了一种字符串左旋算法的实现方法,并提供了详细的代码示例。通过两次元素交换过程,实现了字符串的左旋操作。

        首先声明,本文是在http://blog.youkuaiyun.com/v_july_v/article/details/6322882程序员编程艺术:第一章、左旋转字符串  基础下完成的,也只是敲桥代码,以原来的代码为蓝本,修改了下,写了点注释,发现楼主文章的代码没有什么注释,只给了相关说明。第一次写博客,各位多指教。

       楼主写了好几种方法,我才看了一种算法,下面是代码,代买在ubutun+gcc 环境下测试了下。

#include <stdio.h>
#include <string.h>


//将字符串左旋m位
void rotate(char *s ,int m) ;
//交换两个字符 
void swap(char *p ,char *q) ; 

int main()
{
	/*
	char a = 'Q' ; 
	char b = 'P' ; 
	printf("a = %c ,b == %c \n" ,a ,b) ; 
	swap(&a ,&b) ; 
	printf("swap :::a = %c ,b == %c \n" ,a ,b) ;   
	*/
	
	char str[10] = "abcdefghij" ; 
	printf("str is %s\n" ,str) ; 
	rotate(str ,3) ;
	printf("\n****************************************\n") ; 
	printf("rotate:: str is %s\n" ,str ) ; 
	printf("****************************************\n") ;
	return 0 ; 
}

//交换两个元素
void swap(char *p ,char* q)
{
	char temp ; 
	temp = *p ; 
	*p = *q ; 
	*q = temp ; 
}

void rotate(char *s ,int m) 
{
		//return 0 ; 
		if(strlen(s) == 0  || m <= 0 )
		{
			//返回,错误
			return ; 
		}
		int n = strlen(s) ; 
		printf("length = %d\n" ,n) ;
		int p1 = 0 ;
		int p2 = m ; 
		//n%m = 0 ,说明p1 p2相隔的距离被长度n整除
		//n%m != 0 ,说明p1 p2相隔的距离不能被长度n整除
		//k为第一阶段交换的次数
		int k = n - m - n%m ;    
		while(k)
		{
			//交换p1 p2指向的元素
			swap(&s[p1],&s[p2]) ; 
			p1++ ; 
			p2++ ; //p1 p2分别向后移动一个元素
			k-- ; 
		}
		
		//r 是剩下字符串的个数
		int r = n - p2;
		printf("r = %d \n" ,r) ; 
		
		//第二阶段的处理,当n%m = 0,第二阶段是不存在的,第一阶段就可以完成任务
		//保持p1不动,p2往前交换元素
		while(p2 > p1 )
		{
			//交换p1 p2 指向的元素
			swap(&s[p2] ,&s[p2 -1 ] );
			p2-- ;  
		}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值