您的位置:首页 > 其它

字符串右循环移位

2017-07-14 15:14 211 查看
编写函数实现字符串有循环移位,下面给出了字符串有循环移位的两种方法,二者皆有不同但是最终结果是相同的。

#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息