编写函数实现字符串有循环移位,下面给出了字符串有循环移位的两种方法,二者皆有不同但是最终结果是相同的。
#include<iostream>
#include<string.h>
using namespace std;
void RightLoopMove1(char *pStr, unsigned short steps)//时间换取空间
{
char tmp;//只需要开辟一个空间来完成
unsigned short step = steps;
while(step > 0)
{
tmp = *(pStr + strlen(pStr)-1);
for(int i=strlen(pStr)-1; i>0; --i)
{
pStr[i] = pStr[i-1];
}
*pStr = tmp;
step -- ;
}
}
void RightLoopMove(char *pStr, unsigned short steps)//空间换取时间
{
unsigned short str_len = strlen(pStr);
unsigned short step = steps % str_len;
char * tmp = (char*) malloc(sizeof(char) *step );
memset(tmp, 0, step);
strncpy(tmp, (pStr+str_len-step), step);
memcpy(pStr+step, pStr,str_len-step);
strncpy(pStr, tmp,step);
free(tmp);
}
int main()
{
char ar[] = "abcdefghi";
RightLoopMove(ar,5);
RightLoopMove1(ar,5);
cout<<ar<<endl;
return 0;
}
执行结果:
这里只需要看代码就可以了,这里唯一要说的是memcpy和strcpy在对同一块内存操作的时候会产生覆盖的现象,慎重操作。其他的不需要太多的解释。如果看不明白的自己画图理解, 还有你可能对字符串操作函数不是太明白,需要你单独去学习一下字符串操作的基本八个函数,
这是我当时写过的一个博客,主要是针对str函数操作和使用进分析和展示
http://blog.csdn.net/magiclyj/article/details/69389746。