关闭

编写一个函数,把一个char组成的字符串循环右移n位

标签: c++字符串
831人阅读 评论(0) 收藏 举报
分类:

编写一个函数,把一个char组成的字符串循环右移n位

参考:http://blog.csdn.net/a1232345/article/details/46611917

例如:原来是”abcdefghi”,如果n = 2,移位后应该是”hiabcdefg”。

大体思路是这样的:

  • Step 1:将需要移动的字符串取出来,放入一个新的数组中
  • Step 2:接着把前边没有移动的字符串 拼接到新的数组后边
  • Step 3:在新的字符串尾部添加一个字符串结束标志 ‘\0’

代码如下

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_LEN 1024

void loopMove1(char *srcStr, int moveSteps){
    int length = strlen(srcStr) - moveSteps;
    char temp[MAX_LEN] = "\0";

    strcpy(temp, srcStr+length);
    strcpy(temp+moveSteps, srcStr);

//  temp[strlen(srcStr)] = '\0';
    *(temp+moveSteps+length) = '\0';

    strcpy(srcStr, temp);
}

void loopMove2(char *srcStr, int moveSteps){
    int length = strlen(srcStr) - moveSteps;
    char temp[MAX_LEN] = "\0";

    //从srcStr字符串 的第length位开始拷贝,拷贝moveSteps个,拷贝到temp的起始位置
    memcpy(temp, srcStr+length, moveSteps);
    memcpy(temp+moveSteps, srcStr, length);

    memcpy(srcStr, temp, length+moveSteps);
}

void loopMove3(char *srcStr, char *desStr, int moveSteps){
    int length = strlen(srcStr)-moveSteps;

    strcpy(desStr, srcStr+length);
    strcpy(desStr+moveSteps, srcStr);
    desStr[strlen(srcStr)] = '\0';
}

//这样写是为了 构成链式表达式
char *loopMove4(char *srcStr, char *desStr, int moveSteps){
    int length = strlen(srcStr)-moveSteps;
    char *temp = desStr;

    strcpy(desStr, srcStr+length);
    strcpy(desStr+moveSteps, srcStr);
    desStr[strlen(srcStr)] = '\0';

    return temp;
}

int main(void) {
    char str[10] = "abcdefghi";
    int moveSteps = 2;

    loopMove1(str, moveSteps);
    printf("%s\n", str);

    loopMove2(str, moveSteps);
    printf("%s\n", str);

    char *resStr = (char *)malloc(strlen(str)+1);
    loopMove3(str, resStr, moveSteps);
    printf("%s\n", resStr);
    free(resStr);

    char inputStr[MAX_LEN] = "\0";
    printf("input a string: \n");
    scanf("%s", inputStr);
    char *resStr2 = (char *)malloc(strlen(inputStr)+1);
    loopMove3(inputStr, resStr2, moveSteps);
    printf("%s\n", resStr2);
    free(resStr2);

    char *resStr3 = (char *)malloc(strlen(inputStr)+1);
    printf("%s\n", loopMove4(inputStr, resStr3, moveSteps));
    free(resStr3);

    return 0;
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:57517次
    • 积分:437
    • 等级:
    • 排名:千里之外
    • 原创:15篇
    • 转载:0篇
    • 译文:0篇
    • 评论:37条
    最新评论