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; }