本文为学习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;
}
截图: