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

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

思路:当读到这个题目的时候,没有编写过类似程序的人可能会想,程序的实现就是依照字符的循环右移这样实现的,但仔细想会发现这样很难实现,不妨换一种思路,我们先把需要移到前面的字符取出来放进一个新的字符数组,接着再把前面的没有移动的部分插到新字符数组的尾部,加上字符串结束标志‘\0’,这样就形成了一个符合要求的新的字符数组,把它输出来就可以了.

解析:本题提供了两种方法。

#include <stdio.h>  
#include <string.h>  
#define MAX_LEN 1024  
  
void LoopMove_1(char *pStr, int steps)  
{  
    int len = strlen(pStr) - steps;  
    char temp[MAX_LEN];  
  
    strcpy(temp, pStr + len);  
    strcpy(temp + steps, pStr);  
    *(temp + steps + len) = '\0';  
    strcpy(pStr, temp);  
}  
  
void LoopMove_2(char *pStr, int steps)  
{  
    int len = strlen(pStr) - steps;  
    char temp[MAX_LEN];  
  
    memcpy(temp, pStr + len, steps);  
    memcpy(temp + steps, pStr, len);  
    memcpy(pStr, temp, len + steps);  
}  
  
int main(void)  
{  
    char str1[] = "abcdefghi";  
    LoopMove_1(str1, 3);  
    printf("%s\n", str1);  
  
    char str2[] = "gklmnopqrst";  
    LoopMove_2(str2, 3);  
    printf("%s\n", str2);  
    return 0;  
}


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页