实现字符串循环右移n 位与左移n位(不建立数组,直接用指针)
2017-07-18 20:52
337 查看
编写一个函数,作用是把一个 char 组成的字符串循环
右移 n 个。
比如原来是“abcdefghi”
如果 n=2,移位后应该是“hiabcdefgh”
左移n个
比如原来是“abcdefghi”
如果 n=2,移位后应该是“cdefghiab”
函数头是这样的:
//pStr 是指向以'\0'结尾的字符串的指针
//steps 是要求移动的 n
void LoopMove ( char * pStr, int steps )
{
//...
}
(对上图指向的说明) 只是这个指向的空间的值已经改变了
对于左移应该与右移雷同
右移 n 个。
比如原来是“abcdefghi”
如果 n=2,移位后应该是“hiabcdefgh”
左移n个
比如原来是“abcdefghi”
如果 n=2,移位后应该是“cdefghiab”
函数头是这样的:
//pStr 是指向以'\0'结尾的字符串的指针
//steps 是要求移动的 n
void LoopMove ( char * pStr, int steps )
{
//...
}
(对上图指向的说明) 只是这个指向的空间的值已经改变了
对于左移应该与右移雷同
#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; }
相关文章推荐
- 实现字符串循环右移n 位与左移n位(不建立数组,直接用指针)
- 实现字符串循环右移n 位与左移n位(建立数组)
- 修改字符串字面量&用数组/指针实现的字符串。
- strcat,strcpy,strcmp,strlen4个常用字符串处理函数的数组与指针简单实现方法~
- C语言通过指针和数组实现字符串倒序
- 字符串基本处理操作:数组和指针实现 —— 不调用string函数库
- 实现指定步长循环后移字符串数组算法
- 实现指定步长循环后移字符串数组算法
- 10.6 分别用字符数组和字符指针作函数参数两种方法编程实现在字符串每个字符间插入一个空格的功能
- Linux_C练习:利用指针数组实现字符串的排序。(从键盘获取五个字符串)
- 用指针和数组实现字符串复制
- php中循环实现(字符串,对象,或者数组)编码相互转换
- 编程题:指针数组实现,将多个字符串按字母顺序输出。
- 17周项目二 指针玩字符串1-1 数组做形参实现连接
- java里如何实现循环打印出字符串或字符串数组里的内容
- C++学习笔记(一)--整形,std输出,浮点数,数组,字符串,结构,指针,循环
- 直接给字符指针赋字符串
- 数组、指针、字符串
- 题目1065:输出梯形 (直接用循环控制输出)+题目1432:叠筐 (数组控制形状,最后输出数组)
- 字符串string 字符数组与指向字符串的指针pchar的区别与联系