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

来源:互联网 发布:魔方秀软件下载 编辑:程序博客网 时间:2024/05/04 08:03

比如:“abcdefghi”循环右移2位就是:“hiabcdefg”

给定函数原型:void RightLoopMove(char *pStr,unsigned short steps)


方法一:首先将最后面一个字符赋给临时变量,再将前面字符依次往后挪动一个位置,最后把临时变量赋给第一个字符。


#include <stdio.h>#include <string.h>void RightLoopMove(char *pStr, unsigned short steps){    char *l = pStr;    char *r = pStr + strlen(pStr) - 1;    while (steps)    {        char tmp = *r;        char *p = r;        while (p > l)        {            *p = *(p - 1);            p--;        }        *l = tmp;        steps--;    }}int main(){    char a[] = "abcdefghi";    RightLoopMove(a,2);    printf("%s\n", a);    return 0;}

方法二:三次翻转字符串


#include <stdio.h>#include <string.h>void reverse(char *l, char *r){    while (l < r)    {        char tmp = *l;        *l = *r;        *r = tmp;        l++;        r--;    }}void RightLoopMove(char *pStr, unsigned short steps){    int n = strlen(pStr);    reverse(pStr, pStr+n-steps-1);    reverse(pStr + n - steps,pStr+n-1);    reverse(pStr,pStr+n-1);}int main(){    char a[] = "abcdefghi";    RightLoopMove(a,2);    printf("%s\n", a);    return 0;}


0 0
原创粉丝点击