输入一个字符串和一个非负整数N,要求将字符串循环左移N次。
输入在第1行中给出一个不超过100个字符长度的、以回车结束的非空字符串;第2行给出非负整数N。
在一行中输出循环左移N次后的字符串。
Hello World!
2
llo World!He
在学习计算机的时候,我们经常讲到计算思维,就是说从计算机的视角去思考问题。
回到这道题,移动字符串,人的视角就是直接搬动,计算机不行,计算机的程序都是一步一步来的,要让计算机做事情,就必须把每一步怎么做告诉它,而且要讲的非常具体。
在人看来,字符串移动一次就是搬动一个字符,那么如何搬动一个字符,数组是连续存储的单元,要动一个的位置,就对所有人下手,于是我们先用一个变量先把第一个数组元素的值保存下来,然后,用一个循环将每一个的元素值往前推,完了之后,再让最后一个元素的值为先前第一个元素的值,思路是这样。
实际上操作起来时,由于字符串最后一个元素是字符串结束符\0,搬动时,它也会跑,因此我们要把它的位置挪回来。
#include<stdio.h>
int main()
{
char s[101],temp;
int i,n;
gets(s);
scanf("%d",&n);
while(n--)
{
temp=s[0];
for(i=0;s[i];i++)
s[i]=s[i+1];
s[i--]='\0';
s[i]=temp;
}
printf("%s",s);
}