编写一个函数,作用是把一个 char 组成的字符串循环
右移 n 个。
比如原来是“abcdefghi”
如果 n=2,移位后应该是“hiabcdefgh”
左移n个
比如原来是“abcdefghi”
如果 n=2,移位后应该是“cdefghiab”函数头是这样的:
//pStr 是指向以'\0'结尾的字符串的指针
//steps 是要求移动的 n
void LoopMove ( char * pStr, int steps )
{
//...
}
以下是对右移的分析
对于左移其实与右移相同
/****************************************
* File Name : loopMove.c
* Creat Data : 2015.3.24
* Author : wk
*****************************************/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXLEN 20
void LoopMove1(char *str,int n)
char *p=str;
char temp[MAXLEN];//定义一个数组
int len=strlen(str);
int remain=len-n;//记录剩余的的字符串长度
strcpy(temp,str+remain);
strcpy(temp+n,str);
/*这是左移需要替换的代码
strcpy(temp,str+n);
strcpy(temp+remain,str);*/
*(temp+len)='\0';
strcpy(p,temp);
}
void LoopMove2(char *pstr,int n)
{
int remain=strlen(pstr)-n;
char temp[MAXLEN];
memcpy(temp,pstr+remain,n);
memcpy(pstr+n,pstr,remain);
memcpy(pstr,temp,n);
/* 这是左移需要替换的代码
memcpy(temp,pstr+n,remain);
memcpy(pstr+remain,pstr,n);
memcpy(pstr,temp,remain);*/
}
int main()
{
char pstr[]="abcdef";
int n=2;
LoopMove1(pstr,n);
printf("%s\n",pstr);
char pstr2[]="abcdef";
LoopMove2(pstr2,n);
printf("%s\n",pstr2);
system("pause");
return 0;
}