编程之美---旋转字符串

题目:编写一个函数,把一个char组成的字符串循环右移n位。例如:原来是”abcdefghi”,如果n = 2,移位后应该是”hiabcdefg”。

实现代码:

#include<iostream>
#include<string>
#define max 100

using namespace std;

void fun(char a[],int n)
{
	if(a==NULL)
		return;
	char temp[max];
	int i=0;
	int len=strlen(a);

	char *str=a+len-n;

	while((temp[i++]=*str++)!='\0')
	{
		//
	}
	for(int j=len-n-1;j>=0;j--)
	{
		a[j+n]=a[j];
	}
	for(int j=0;j<n;j++)
	{
		a[j]=temp[j];
	}
	a[len+1]='\0';
}

int main()
{
	char a[max];
	int n;

	gets(a);
	cin>>n;

	fun(a,n);

	cout<<a<<endl;

	system("pause");
	return 0;
}

时间: 2024-10-12 06:59:22

编程之美---旋转字符串的相关文章

编程之美之字符串移位包含问题

[题目] 给定两个字符串s1和s2,要求判断s2是否能够被通过s1做循环移位(rotate)得到的字符串包含.例如,S1=AABCD和s2=CDAA,返回true:给定s1=ABCD和s2=ACBD,返回false. [分析] [思路一] 从题目中可以看出,我们可以使用最直接的方法对S1进行循环移动,再进行字符串包含的判断,从而遍历其所有的可能性. 字符串循环移动,时间复杂度为O(n),字符串包含判断,采用普通的方法,时间复杂度为O(n*m),总体复杂度为O(n*n*m). 字符串包含判断,若采

编程算法 - 左旋转字符串 代码(C)

左旋转字符串 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部. 请定义一个函数实现字符串左旋转操作的功能. 编程珠玑, 首先翻转前部分, 再翻转后部分, 最后全部翻转. 代码: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <stdio

编程之美---计算字符串的相似度

对于不同的字符串,判断其相似程度.可以修改一个字符,增加一个字符,删除一个字符等操作. 分析:当两个字符串第一个字符相等时,直接把两个字符串跳到第二个位置开始比较就可以了.当两个字符串第一个字符不相等时,不管怎么操作总是,要么第一个串跳到第二个位置,第二个串位置不变:或者第一个串位置不变,第二个跳到第二个位置:或者两个串都跳到第二个位置(同过修改串的字符).于是就可以写个递归程序处理. 1 int calculateStringDistance(string strA, int pABegin,

编程之美——计算字符串相似度

方法一:使用递归思想 代码: 1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 int minValue(int t1,int t2,int t3); 6 int calculateStringDistance(string strA,int pAbegin,int pAend,string strB,int pBbegin,int pBend); 7 8 int main() 9 { 10 str

字符串移位[源:《编程之美》]

<编程之美>221页,问题:字符串scr=“AABCD”,字符串des="CDAA",移位src,是否包含串des?这本书今天初看,随便翻了几页,先不说问题,光是这本书排版就出现很多错误!马上感觉这本书失了水准,可能是印刷问题吧.比如,char src[5]="AABCD"...之类 记录这个小题,因为联想到昨天学的直接插入排序,也是在数组中相邻两两之间移动,顺便把它收录了,所谓题不厌多,只要类型相同,就归纳在一起! 首先考虑的是移位的问题,有两种可能,

[搜索]字符串的相似度问题-从编程之美说起

在<编程之美>之3.3讲到了计算字符串的相似度,请看下图 原文作者做了很详细的解释,有兴趣的朋友可以参考原文. 其实,总结为一点,是求两个字符的编辑距离,关于编辑距离,可以参考这儿 http://zh.wikipedia.org/wiki/%E7%B7%A8%E8%BC%AF%E8%B7%9D%E9%9B%A2 求两个字符串的编辑距离是有公式的,公式如下: 所以,根据这个公式,我们实现代码为:(C++) int minimum(int a,int b,int c) { return min(a

【程序员编程艺术】学习记录1:左旋转字符串之指针翻转法

[程序员编程艺术]学习记录1:左旋转字符串之指针翻转法 题目:左旋转字符串 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部,如把字符串abcdef左旋转2位得到字符串cdefab.请实现字符串左旋转的函数,要求对长度为n的字符串操作的时间复杂度为O(n),空间复杂度为O(n) 思路一.暴力移位法 //暴力移位法 void leftshiftone(char *s, int n) { char t = s[0]; for(int i = 1;i < n; i++) s[i-1]

【程序员编程艺术】学习记录2:左旋转字符串之循环移位法

[程序员编程艺术]学习记录2:左旋转字符串之循环移位法 GCD算法:(辗转相除法/欧几里得算法) gcd是求最大公约数的算法,作为TAOCP第一个算法 gcd算法流程: 首先给定两个整数m,n(m大于等于n)如果小于则直接交换再处理 ①求余数 r=m%n ②假如r=0,算法结束,n即为所求 否则,重新令m <- n, n <-r 之后循环 <<<<<<<<<<<<<<<<<<<&l

程序员编程技术学习笔记——左旋转字符串

程序员编程技术学习笔记--左旋转字符串 1.    题目描述 给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串"abcdef"前面的2个字符'a'和'b'移动到字符串的尾部,使得原字符串变成字符串"cdefab".请写一个函数完成此功能,要求对长度为n的字符串操作的时间复杂度为 O(n),空间复杂度为 O(1). 2.    解法1:暴力左移 这个解法简单粗暴易想!你不是要以为k个字符吗,我先移动一位,然后把移动一位的函数运行k次就好啦~~