【c语言】练习:把一个char组成的字符串循环右移n个

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

这是《程序员编程宝典》第14章中的面试例题3。

看书中答案之前,我想了一种方法,相比书中那两种解法,似乎效率高一些。感觉不错,是为记。

书中的解法:

// pstr 是指向以'\0'结尾的字符串的指针

//steps 是要求移动的n



void LoopMove(char *pstr,int steps){

    int n=strlen(pstr)-steps;

    char tmp[MAX_LEN];

    strcpy(tmp,pstr+n);

    strcpy(tmp,steps,pstr);

    *(tmp+strlen(pstr))='\0';

    strcpy(pstr,tmp);

}





void LoopMove(char *pstr,int steps){

    int n=strlen(pstr)-steps;

    char tmp[MAX_LEN];

    memcpy(tmp,pstr+n,steps);

    memcpy(pstr_steps,pstr,n);

    memcpy(pstr,tmp,steps);

}

我的方法:

#include <stdio.h>

#include <string.h>

#define MAX_LEN 20

void LoopMove(char *a,int steps);



int main(){

        char a[]="abcdefghi";

        LoopMove(a,2);

        return 0;

}



void LoopMove(char *a,int steps){

        int shift;

        int i;

        int len=strlen(a);

        char b[MAX_LEN]={0};



        for(i=0;i<len;i++)

        {

                shift=(i+steps)%(len);

                b[shift]=a[i];

        }



        printf("a: %s is s\nafter shift %d steps, a: %s\n",a,steps,b);



}

 

你可能感兴趣的:(char)