实现字符串循环右移n 位与左移n位(不建立数组,直接用指针)
来源:互联网 发布:java反射原理 编辑:程序博客网 时间:2024/05/17 22:01
编写一个函数,作用是把一个 char 组成的字符串循环
右移 n 个。
比如原来是“abcdefghi”
如果 n=2,移位后应该是“hiabcdefgh”
左移n个
如果 n=2,移位后应该是“cdefghiab”
函数头是这样的:
//pStr 是指向以'\0'结尾的字符串的指针
//steps 是要求移动的 n
void LoopMove ( char * pStr, int steps )
{
//...
}
(对上图指向的说明) 只是这个指向的空间的值已经改变了
对于左移应该与右移雷同
/**************************************** * File Name : loopMove.c * Creat Data : 2015.3.24 * Author : wk *****************************************/ #include <stdio.h>#include <stdlib.h>#include <string.h>void reserve(char *p, char *q){while(p < q){*p ^= *q; //利用异或运算得到两字符交换*q ^= *p;*p ^= *q; /* *p = *p+ *q; *q = *p-*q; *p = *p-*q;*/p++;q--;}}void loopMove(char *str, int steps){char *p = str;int len = strlen(str);char *q = p + len - 1 - steps;reserve(p, q); //先翻转前一段,这里调用函数只是指针的拷贝,没有返回指针,函数在用那个作用域中的指针改变了字符串数组中的值并没有返回来,所以这语句之后p=str q=str+len-1-steps 没有改变p = q + 1;q = str + len - 1;reserve(p, q); //翻转后一段,同理,函数返回之后,p,q 还是 上两句改变之后的值p = str;reserve(p, q); //翻转整个字符串,同理,函数返回之后,p,q 还是 上句改变之后的值}int main(){char string[] = "12345678";//int steps = 0;printf("string: %s\n", string);printf("input step: ");scanf("%d", &steps);loopMove(string,steps);printf("after loopMove %d: %s\n", steps, string);return 0;}
0 0
- 实现字符串循环右移n 位与左移n位(不建立数组,直接用指针)
- 实现字符串循环右移n 位与左移n位(不建立数组,直接用指针)
- 实现字符串循环右移n 位与左移n位(建立数组)
- 实现字符串循环右移N位(改进版)
- Exe 字符串循环右移n位
- 字符串循环右移n位
- 字符串循环右移n位,函数
- 字符串循环右移N位算法
- 将字符串循环左移n位
- (1423)编写函数实现字符串循环右移n位
- 实现将字符串右循环n位
- 输入m位字符串循环右移n位
- 字符串右移n位
- char 组成的字符串循环右移N位
- 编写一个函数,将字符串循环右移n位
- 如何把char字符串循环右移N位
- 字符串循环右移n位的函数
- 在时间复杂度O(n)内,实现将数组A[n]中所有元素左循环移n位
- uva271
- (4.4.7)android其他类
- OC-04值对象
- nanomsg pair tcp SERVER端各个模块的状态
- Sicily 1048. Inverso
- 实现字符串循环右移n 位与左移n位(不建立数组,直接用指针)
- hdu 1716 排列2(全排列+dfs)
- 【c语言】判断1000年---2000年之间的闰年
- linux常用基本命令
- 选择排序函数的计时程序
- 在xcode系统的库文件里面进行了操作造成的bug
- Android HAL实例解析---LED
- jQuery插件开发全解析
- Sicily 1118. War on Weather