旋转单词
题目描述:今天的英语课,王老师为了复习以前学过的单词,提高学生的学习兴趣,想出了一个主意:
读入M组数据,其中每组数据有一个单词L(单词长度≤36个字符)和一个整数N(1≤N≤36),从该单词最末位开始逐位移到单词的开头,如果还没达到N值,则再从末位开始移动,直到达N值为止,求移N位后的新单词。你能编程帮助贝贝最快完成任务吗?
输入共有2×M+I行,第1行为M,第2行开始为具体数据,每一组数据有2行,第1行字串L,第2行为N。
输出共M行,每行为旋转后的字串。
样例输入:
1
computer
3
样例输出:
tercompu
应用char类型的字符串写会简单一点,但新建字符串的时候不能直接把原来的右移再粘到前面,因为强制’\0’终止的话可能导致编译错误。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,i,k,len;
char a[37],b[37];
scanf("%d",&n);
while(n--)
{
scanf("%s",a);
len=strlen(a);
scanf("%d",&k);
while(1)
{
if(k<len) break;
else k=k-len;//去掉不必要的移动,节约时间
}
for(i=0;i<len;i++)
{
if(i+k<len)
b[i+k]=a[i];//在范围内,直接移动
else
{
b[i+k-len]=a[i];//不在范围内,放到前面
}
}
b[len]='\0';//不要忘记终止
printf("%s\n",b);
}
return 0;
}