strcpy +memcpy实现循环右移

#include<stdio.h>
#include<assert.h>
#include<string.h>
char *strcpy(char*strDest,const char*strSrc)
{
        assert(strDest!=NULL&&strSrc!=NULL);
        char * addr = strDest;
        while( *strSrc!='\0')
                *strDest++ = *strSrc++;
        *strDest = '\0';
        return addr;
}

//循环移动steps位
void LoopMove(char *pStr,int steps)
{
        int n = strlen(pStr)-steps;
        char temp[1000];
        strcpy(temp,pStr+n);
        strcpy(temp+steps,pStr);
        *(temp+strlen(pStr)) = '\0';
        strcpy(pStr,temp);
}

//循环移动方式2
void LoopMove2(char *pStr,int steps)
{

        int n = strlen(pStr)-steps;
        char temp[1000];
        memcpy(temp,pStr+n,steps);
        //memcpy(temp+steps,pStr,n);
        
//memcpy(pStr,temp,strlen(temp));
        memcpy(pStr+steps,pStr,n);
        memcpy(pStr,temp,steps);
}

int main()
{       char a[] = "123456789";
        //char b[]="123";
        
//printf("%d\n",strlen(strcpy(b,a)));
        
//printf("%s,%s\n",b,a);

        printf("%s\n",a);
        //LoopMove(a,3);
        LoopMove2(a,4);
        printf("%s\n",a);
        return 0;
}

                                 
posted @ 2012-09-15 15:00  zhengmian  阅读(515)  评论(4)    收藏  举报