实现字符串右循环移位函数。
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; }
执行结果如图:
由以上两种方法可知要空间和时间都效率高的可能是很难达到的。
相关文章推荐
- 实现字符串右循环移位函数
- 编写一函数用来实现左右循环移位。函数原型为move(value,n);n>0时右移n位,n<0时左移|n|位。
- 实现字符串右循环移位
- 一个小学奥数题的python实现(全排列,字符串循环移位,统计元素)
- 编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefgh”
- C语言请实现字符串循环右移函数。列如字符串“abcdefghi”向右移2位就是“hiabcdefg”
- (1423)编写函数实现字符串循环右移n位
- 【C语言】请实现字符串循环右移函数。列如字符串“abcdefghi”向右移2位就是“hiabcdefg”
- 字符串左旋--循环移位法(c++实现)
- 编程实现字符串的循环移位操作
- 编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefgh”
- Oracle 实现字符串相加 函数
- 常见字符串处理函数的C实现
- 要求:不申请变量和空间反转字符串,用一个函数实现。VIA笔试题
- 一个用VB实现的对任意字符串进行排列并排序的函数
- SQL自定义函数实现字符串截取转化为整型(主要用于对批量数据的操作)
- Sqlite3 的扩展:实现 REGEXP函数和包含字符串查找的函数 CONTAIN
- 字符串逻辑比较函数---StrCmpLogicalW的模拟实现
- 不调用C库函数string.h实现字符串的连接
- php 实现文章摘要功能,截取字符串的长度函数