【和JULY大神学算法】左旋转字符串

本文为学习JULY大神程序员编程艺术系列的个人学习笔记。大神原文链接http://blog.csdn.net/v_july_v/article/details/6322882

说明:


        题目描述:

定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部,如把字符串abcdefgh左旋转2位得到字符串cdefghab。


水水对大神提出的第五种算法:三部翻转法印象深刻。三部翻转法对此题的实现极为简单,思路巧妙。

思路为:

(1)字符串S由AB两部分组成,最终要达到的结果为BA。

(2)定义一种操作F(X),他实现X中字符顺序的反转。比如F(abc)=cba。

(3)则BA= F(F(A)F(B))。举例来说,比如字符串S为abcdefg,A=abc,B=defg,最终要达到的结果为defgabc.

F(A)=cba; F(B)= gfed

F(F(A)F(B))=F(cbagfed)=defgabc

大家看,结果即为我们想要的结果。

我的代码:

// project1.cpp : Defines the entry point for the console application.
//

/*
[左旋转字符串]
题目描述:
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部,如把字符串abcdef左旋转2位得到字符串cdefab。


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




void tranverse( int begin, int end, char *s){
char tem;
while( begin < end){ //swap s[begin] and s[end]
tem= s[begin];
s[begin]= s[end];
s[end]= tem;

begin++;
end--;
}
};


int main(int argc, char* argv[])
{
char string[20];
int n; //the number of characters for leftshifting
int len; //the lenth of the string



cout << "input a string with no more than 20 characters:" << endl;
cin >> string;
len=strlen(string);

cout << "input the number of characters that you want to do leftshifting:" << endl;
cin >> n;


//the core of the method
tranverse( 0, n-1, string);
tranverse( n, len-1, string );
tranverse ( 0, len-1, string);


cout<< "the result of leftshifting is:" << endl;
for( int i=0; i< len; i++)
cout << string[i];


cout<< endl;


return 0;
}

截图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值