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