现在的位置: 首页 > 综合 > 正文

字符串处理——字符串循环右移

2012年10月17日 ⁄ 综合 ⁄ 共 707字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.