-
题目描述:
- 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
-
输入:
- 多组测试数据,每个测试数据包含一个字符序列S和非负整数K。其中S的长度不超过1000。
-
输出:
- 对应每个测试案例,输出新序列。
-
样例输入:
-
UDBOJ 4 abba 1
-
样例输出:
-
JUDBO bbaa
思路:
跟翻转单词顺序类似:
1.先翻转前n个字符;
2.再翻转后len-n个字符;
3.整体旋转一下。
-
/* 左旋字符串 by Rowandjj 2014/8/16 */ #include<stdio.h> #include<string.h> #include<stdlib.h> void Reverse(char *pBegin,char *pEnd) { if(pBegin == NULL || pEnd == NULL) { return; } char temp; while(pBegin < pEnd) { temp = *pBegin; *pBegin = *pEnd; *pEnd = temp; pBegin++; pEnd--; } } //pData为字符串 n为左旋字符的个数 void LeftRotateString(char *pData,int n) { if(pData == NULL || n <= 0) { return; } int len = strlen(pData); if(len <= 0) { return; } n = n%len; //旋转前n个字符 Reverse(pData,pData+n-1); //旋转后面len-n个字符 Reverse(pData+n,pData+len-1); //整体旋转 Reverse(pData,pData+len-1); } int main() { char str[1000]; int n; while(scanf("%s %d",str,&n) != EOF) { LeftRotateString(str,n); printf("%s\n",str); } return 0; }
-
-
-
-