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

来源:互联网 发布:联想风扇除尘软件 编辑:程序博客网 时间:2024/05/18 16:17

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

#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;}


执行结果如图:


由以上两种方法可知要空间和时间都效率高的可能是很难达到的。

0 0
原创粉丝点击