纪念逝去的岁月——C/C++字符串旋转

几年前,我还不会写这个

例如:

1、向右→旋转5个字符

输入:HelloWorld

输出:WorldHello

2、向右→旋转3个字符

输入:HelloWorld

输出:rldHelloWo

代码

 1 #include <string.h>
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4
 5 int scrollstr(char * p, int iStep)
 6 {
 7     if(NULL == p)
 8     {
 9         return -1;
10     }
11     int iLen = strlen(p);
12     iStep %= iLen;
13     if(0 == iStep)
14     {
15         return 0;
16     }
17     char * pt = (char *)malloc(iLen + 1);
18     if(NULL == pt)
19     {
20         return -1;
21     }
22     memset(pt, 0, iLen + 1);
23     int i = 0;
24     for(i = 1; i <= iStep; i++)
25     {
26         pt[iStep - i] = p[iLen - i];
27     }
28     for(i = 1; i <= iLen - iStep; i++)
29     {
30         p[iLen - i] = p[iLen - i - iStep];
31     }
32     for(i = 0; i < iStep; i++)
33     {
34         p[i] = pt[i];
35     }
36
37     return 0;
38 }
39
40 int main()
41 {
42     char pX[128] = {"HelloWorld"};
43
44     printf("src : [%s]\n", pX);
45     scrollstr(pX, 5);
46     printf("dst : [%s]\n", pX);
47
48     return 0;
49 }

编译

$ g++ -o scrollstring scrollstring.cpp

运行

$ ./scrollstring
src : [HelloWorld]
dst : [WorldHello]

再见……

时间: 2024-10-15 15:10:24

纪念逝去的岁月——C/C++字符串旋转的相关文章

纪念逝去的岁月——C/C++字符串回文

判断字符串是否是回文: 1. 输入:hello world dlrow olleh 输出:1 2. 输入:nihao hello 输出:0 代码 #include <stdio.h> #include <string.h> int palindrome(char * p) { if(NULL == p) { return 0; } int iLen = strlen(p); int iHalf = iLen / 2; int i = 0, iEnd = iLen - 1; for(

纪念逝去的岁月——C/C++字符串反转

几年前,我还不会写这个 输入:hello world 输出:dlrow olleh 代码 1 #include <stdio.h> 2 #include <string.h> 3 4 void cvtstring(char * pStr) 5 { 6 if(NULL == pStr) 7 { 8 return ; 9 } 10 int iLen = strlen(pStr); 11 int iStart = 0, iStop = iLen / 2; 12 int i = 0; 13

纪念逝去的岁月——C/C++排序二叉树

1.代码 2.运行结果 3.分析 1.代码 #include <stdio.h> #include <stdlib.h> typedef struct _Node { int value; struct _Node * pLeft; struct _Node * pRight; } Node; Node * getNewNode(int iValue) { Node * p = (Node *)malloc(sizeof(Node)); if(NULL != p) { p->

纪念逝去的岁月——C++实现一个栈

1.代码 2.运行结果 1.代码 stack.cpp #include <stdio.h> #include <string.h> class ClsStack { private : void ** __m_Data; int __m_pos; size_t __m_memsize; protected : int __resize(size_t n); size_t __doublesize(size_t n); public : ClsStack(size_t n = 0);

纪念逝去的岁月——C++实现一个队列(使用类模板)

1.代码 2.运行结果 1.代码 1 #include <stdio.h> 2 #include <string.h> 3 4 template <typename T> class ClsQueueData 5 { 6 private : 7 ClsQueueData * __m_next; 8 T * __m_Data; 9 10 protected : 11 void _clear(); 12 13 public : 14 ClsQueueData(T * pDa

纪念逝去的岁月——C++实现一个栈(使用类模板)

这个版本是上个版本的加强版,上个版本的代码:http://www.cnblogs.com/fengbohello/p/4542912.html 1.代码 2.运行结果 1.代码 1 #include <stdio.h> 2 #include <string.h> 3 4 //#define USEDEBUG 5 6 #ifdef USEDEBUG 7 #define DEBUG(fmt, arg...) 8 do{ 9 printf("%s %d %s() : "

纪念逝去的岁月——C/C++交换排序

交换排序 代码 #include <stdio.h> void printList(int iList[], int iLen) { int i = 0; for(i = 0; i < iLen; i++) { printf("%d ", iList[i]); } printf("\n"); } int exchangeSort(int iList[], int iNum) { int i = 0, j = 0; for(i = 0; i <

纪念逝去的岁月——C/C++冒泡排序

冒泡排序 代码 #include <stdio.h> void printList(int iList[], int iLen) { int i = 0; for(i = 0; i < iLen; i++) { printf("%d ", iList[i]); } printf("\n"); } int bubbleSort(int iList[], int iLen) { int i = 0, j = 0; for(i = 0; i < i

笔试算法题(35):最长递增子序列 &amp; 判定一个字符串是否可由另一个字符串旋转得到

出题:求数组中最长递增子序列的长度(递增子序列的元素可以不相连): 分析: 解法1:应用DP之前需要确定当前问题是否具有无后效性,也就是每个状态都是对之前状态的一个总结,之后的状态仅会受到前一个状态的影响:对于递增子序列 而言,可以首先确定前面k个元素的最长子序列,然后计算增加一个元素之后的最长子序列.由于每个位置i都会与0-i的每个位置之前的LIS进行比较,并选 择保持递增的一个序列,所以总能找到LIS,但是时间复杂度为O(N^2),空间复杂度为O(N): 此解法的性能的瓶颈在于对于位置为i+