5-31 字符串循环左移

输入一个字符串和一个非负整数 N,要求将字符串循环左移 N 次。

输入格式:

输入在第1行中给出一个不超过 100 个字符长度的、以回车结束的非空字符串;第 2 行给出非负整数 N。

输出格式:

在一行中输出循环左移 N 次后的字符串。

输入样例:

Hello World!
2

输出样例:

llo World!He


解题思路:

利用 C 语言本身提供的字符串处理函数能更方便地解题。

循环左移有有个特点,当要移动的长度等于字符串有效长度或其倍数时,左移后字符串还会是原样。因此程序首先对要移动的次数对有效长度取余。

再利用 strcpy,strcat 来产生目标字符串。具体如算法所示。

解题代码:

include<stdio.h>

include<string.h>

int main ()
{
char s[101];
gets (s);

int N;
scanf("%d", &N);

int s_length = strlen (s);
int i = N % s_length;
char target[101];

if (i != 0) {
strcpy (target, s + i);
s[i] = '\0'; //复制之后,调整字符串 s 的最终位置 (i 之后的字符已经复制给 target)
strcat (target, s);
puts (target);
} else {
puts (s); //左移次数是字符串有效长度的倍数,直接输出原字符
}

return 0;
}

posted @ 2016-08-04 22:10  文之  阅读(972)  评论(0)    收藏  举报