文字列処理-文字列ループを右に移動
1、文字列のループを右に移動---
解法:題意に基づいて、作成した関数は文字列をnビット右にシフトさせることができる.例えば、文字列「abcdefghi」、n=2の場合、シフト後は「hiabcdefg」である.
(1)前段の「gfedcba hi」を反転し、
(2)後段「gfedcba ih」を反転
(3)最後に「hi abcdefg」全体を反転させ,所望の結果を得る.
以下はc言語のポインタ操作コードです
解法:題意に基づいて、作成した関数は文字列を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;
}