您的位置:首页 > 其它

实现字符串右循环移位函数。

2015-03-29 19:44 183 查看
方法一:开辟一个空间存放移位后的字符串,但是空间耗费大且引用了库函数。程序与测试如下:

#include <stdio.h>
#include <malloc.h>
#include <string.h>
void RightLoopMove(char *pStr,unsigned short steps)
{
char *data;
int len = strlen(pStr);//确定字符串长度
steps %= len;//求模可知其实际所需移动最小位数
if(steps == 0)//若为零,则不变
{
return;
}
data = (char*)malloc(sizeof(char)*len+1);//否则开辟字符串空间
strcpy(data,pStr+(len-steps));//拷贝所需移位的后半部分
strncat(data,pStr,len-steps);//将前半部分连接到后半部分之后
strcpy(pStr,data);//将字符串拷贝回原字符串空间
free(data);//释放开辟的空间
}
int main()
{
int i;
char str[] = "abcdefghi";
printf("%s\n",str);
RightLoopMove(str,2);
printf("%s\n",str);
return 0;
}


执行结果如图:



方法二:用一个中间变量存取最后一个数,其余整体进行操作,但是此方法时间耗费大,函数与测试如下:

#include <string.h>
#include <stdio.h>
void RightLoopMove(char *pStr,unsigned short steps)
{
char tmp;//定义中间变量
int i;//循环变量
int len = strlen(pStr);//求字符串长度
steps %= len;//求所需移动的位数
if(steps == 0)//若为零则不移动
{
return;
}
while(steps > 0)//否则每次讲最后一位保存其余后移
{
tmp = pStr[len-1];
for(i = len-1;i > 0 ;i--)
{
pStr[i] = pStr[i-1];
}
pStr[0] = tmp;
steps--;
}
}
int main()
{
int i;
char str[] = "abcdefghi";
printf("%s\n",str);
RightLoopMove(str,2);
printf("%s\n",str);
return 0;
}


执行结果如图:



由以上两种方法可知要空间和时间都效率高的可能是很难达到的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐