编写一个函数,把一个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位

例如:把一个char 组成的字符串循环右移 n 位,原来是 ”abcdefghi“,如果 n = 2,移位后应该是 ”hiabcdefgh“ 函数头如下: /** @ pstr      指的是...

编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefgh”

循环移位

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

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

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

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

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

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

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

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

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

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

用递归的思想写编写一个函数reverse_string(char * string)实现字符串反向输出和反向排列

#include void reverse_string(char *string) { if ('\0'!=*(++string)) reverse_string(string);//递...

算法题 用C或C++实现void reverse(char* str)函数,即反转一个null结尾的字符串

用C或C++实现void reverse(char* str)函数,即反转一个null结尾的字符串
  • fumier
  • fumier
  • 2015-01-15 10:32
  • 1361
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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