文字列処理-文字列ループを右に移動


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
", q); reserve(p, q); // p = q + 1; q = str + len - 1; reserve(p, q); // p = str; reserve(p, q); // //printf("%s
", str); } int main() { char string[] = "123456789"; int steps = 0; printf("string: %s
", string); printf("input step: "); scanf("%d", &steps); loopMove(string, steps); printf("after loopMove %d: %s
", steps, string); return 0; }