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

原创 2015年07月10日 15:17:27

编写一个函数,把一个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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

关于《程序员编程宝典》中编写一个函数,作用是把一个char组成的字符串循环右移n位的问题

#include "stdafx.h" #include "stdlib.h" #include "stdio.h" #include void LoopMove(char *pStr, int ...

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

#include #include using namespace std; //编写一个函数,作用是把一个char组成的字符串循环右移n个 //调用strcpy函数方式实现 void ...

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

例如:把一个char 组成的字符串循环右移 n 位,原来是 ”abcdefghi“,如果 n = 2,移位后应该是 ”hiabcdefgh“ 函数头如下: /** @ pstr      指的是...
  • tkp2014
  • tkp2014
  • 2015年08月28日 14:53
  • 689

练习 2-8 编写一个函数rightrot(x, n),该函数返回将x循环右移(即从最右端移出的位将从最左端移入)n(二进制)位后所得到的值。

这个题目呢,首先需要确定数据类型,在这里我选择的数据类型是unsigned类型,具体实现方法很简单,先得到unsigned类型数据的长度len,然后将x的后n位提取出来,左移len-n位得到end,然...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

【c++】字符串循环左移

输入一个字符串和一个非负整数N,要求将字符串循环左移N次。输入格式:输入在第1行中给出一个不超过100个字符长度的、以回车结束的非空字符串;第2行给出非负整数N。输出格式:在一行中输出循环左移NN次后...

【C语言】字符串右循环移位

C语言

如何把char字符串循环右移N位

C语言实现:输入一个字符串,将其循环右移N位。 1.利用strcpy()函数实现: 即将输入pStr的后N位放入temp的前N位,再将pStr所有(到‘\o’结束)放入te...
  • coderwj
  • coderwj
  • 2016年03月13日 19:46
  • 1305

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

例如:原来是”abcdefghi”,如果n = 2,移位后应该是”hiabcdefg”。 思路:当读到这个题目的时候,没有编写过类似程序的人可能会想,程序的实现就是依照字符的循环右移这样实现的,但仔...

关于《程序员编程宝典》中编写一个函数,作用是把一个char组成的字符串循环右移n位的问题

#include "stdafx.h" #include "stdlib.h" #include "stdio.h" #include void LoopMove(char *pStr, int ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编写一个函数,把一个char组成的字符串循环右移n位
举报原因:
原因补充:

(最多只允许输入30个字)