实现字符串循环右移n 位与左移n位(不建立数组,直接用指针)
来源:互联网 发布:北京电脑编程学校 编辑:程序博客网 时间:2024/05/18 00:47
编写一个函数,作用是把一个 char 组成的字符串循环
右移 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;}
阅读全文
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位
- 内部类
- Android网络应用之使用Scoket的Android客户端与TCP服务器的简单交互
- jQuery中html()和text()的区别
- 数据结构-链表
- 文章标题
- 实现字符串循环右移n 位与左移n位(不建立数组,直接用指针)
- Intro Mechine Learning
- USACO-Section2.2 Subset Sums【动态规划】
- 区间dp
- shell脚本下自动发邮箱
- js练习表回顾
- 如何学习SAP HANA
- Command
- c语言表达式的运算顺序