实现字符串右循环移位函数

来源:互联网 发布:网上投票系统 源码 编辑:程序博客网 时间:2024/05/18 12:43

题目:请实现字符串右循环移位函数,比如:“abcdefghi”循环右移2位就是“hiabcdefg”.
函数原型:void RightLoopMove(char *pStr, unsigned short steps)
函数参数说明:
pStr: Point to a ‘\0’ terminated string
steps: The rotate shift numbers

方法一:移位法

#include<stdio.h>#include<assert.h>#include<string.h>void RightLoopMove(char*pStr,unsigned short steps){    int len=0;    char tmp=0;    int i=0;    int j=0;    assert(pStr!=NULL);    len=strlen(pStr);    for(j=0;j<steps;j++)    {        tmp=*(pStr+len-1);        for(i=0;i<len-1;i++)        {            *(pStr+len-1-i)=*(pStr+len-2-i);        }        *pStr=tmp;    }}int main() {    char arr[]="abcddefghi";    RightLoopMove(arr,2);    printf("%s\n",arr);    return 0;}

这里写图片描述
方法二:翻转法

#include<stdio.h>#include<assert.h>#include<string.h>void Severse(char*p,char*q)//翻转函数{    char tmp;    assert(p);    assert(q);    while(p<q)    {        tmp=*p;        *p=*q;        *q=tmp;        p++;        q--;    }}void RightLoopMove(char *pStr, unsigned short steps){    int len=strlen(pStr);    assert(pStr);    assert(steps);    Severse(pStr,pStr+len-steps-1);//前部分翻转    Severse(pStr+len-steps,pStr+len-1);//后部分翻转    Severse(pStr,pStr+len-1);//整体翻转}int main(){    char arr[]="abcdefghi";    RightLoopMove(arr,2);    printf("%s\n",arr);    return 0;}

这里写图片描述

原创粉丝点击