题目来源:《程序员面试宝典》
原来是“abcdefghi”,如果n=2,移位后应该是“hiabcdefg”。
函数void LoopMove(char *pStr,int steps)//pStr是以‘\0’结尾的字符串,steps为要移动的n。
解法一:利用strcpy
void LoopMove(char *pStr,int steps)
{
int n=strlen(pStr)-steps;//对比例子n=7
char tmp[MAX_LEN];
strcpy(tmp,pStr+n);//tmp="hi";
strcpy(tmp,pStr);//tmp="hiabcdefghi";
*(tmp+strlen(pStr))='\0';
strcpy(pStr,tmp);
}
解法二:利用memcpy
void LoopMove(char *pStr,int steps)
{
int n=strlen(pStr)-steps;
char tmp[MAX_LEN];
memcpy(tmp,pStr+n,steps);//对比例子tmp="hi"
memcpy(pStr+steps,pStr,n);//对比例子pStr="ababcdefg"
memcpy(pStr,tmp,steps);
}
解法三:
#define MAX_LEN 20
void LoopMove(char *a,int steps)
{
int shift;
int len=strlen(a);
char b[MAX_LEN]={0};
for(int i=0;i<len;i++)
{
shift=(i+steps)%len;
b[shift]=a[i];
}
printf("%s",b);
}