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  文之  阅读(943)  评论(0编辑  收藏  举报