1、字符串循环右移--- 解法:根据题意,编写的函数能把字符串循环右移n位。例如字符串“abcdefghi”,如果n=2,移位后是“hiabcdefg”。 (1)先翻转前段“gfedcba hi”, (2)再翻转后段“gfedcba ih” (3)最后翻转整个“hi abcdefg”,得到想要的结果。 下面是c语言的指针操作代码 - //7/14 16:44
- #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++;
- q--;
- }
- }
- void loopMove(char *str, int steps)
- {
- char *p = str;
- int len = strlen(str);
- char *q = p + len - 1 - steps;
- //printf("%s\n", q);
-
- reserve(p, q); //先翻转前一段
- p = q + 1;
- q = str + len - 1;
- reserve(p, q); //翻转后一段
- p = str;
- reserve(p, q); //翻转整个字符串
- //printf("%s\n", str);
- }
-
- int main()
- {
- char string[] = "123456789";
- 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;
- }
|