题目描述
对于每个单词列表,输出一行,把每个单词都反转而不改变单词的顺序。此问题包含多个测试用例!多输入的第一行是整数N。每个输入块的格式都在问题描述中。
输入
你将获得一些测试用例。第一行包含一个正整数,表示要遵循的案例数。每个案例都在一行中给出,该行包含由一个空格分隔的单词列表,每个单词仅包含大写和小写字母。
输出
对于每个测试用例,请在一行上输出
样例输入 Copy
3 I am happy today To be or not to be I want to win the practice contest
样例输出 Copy
I ma yppah yadot oT eb ro ton ot eb I tnaw ot niw eht ecitcarp tsetnoc
#include<stdio.h>
#include<string.h>
int main()
{
int n;
while(~scanf("%d",&n))//多组测试用例
{
getchar();
char word[n][100];int kongge[100]={0};
int a[n],i,j,k,cnt=1,p;
char temp;
for(i=0;i<n;i++){
gets(word[i]);
a[i]=strlen(word[i]);
}
for(i=0;i<n;i++){cnt=1;
for(j=0;j<a[i];j++){
if(word[i][j]==' '){
kongge[cnt++]=j;//把空格的位置记录下来
}
}
for(p=1;p<=cnt-2;p++){int len=(kongge[p+1]-kongge[p]-1)/2;
for(k=1;k<=len;k++){
temp=word[i][k+kongge[p]];
word[i][k+kongge[p]]=word[i][kongge[p+1]-k];
word[i][kongge[p+1]-k]=temp;
} //逆转第一个空格和最后一个空格之间的单词
}
for(j=0;j<(kongge[1])/2;j++){
temp=word[i][j];
word[i][j]=word[i][kongge[1]-j-1];
word[i][kongge[1]-j-1]=temp;//使第一个单词逆转
}
int t=(a[i]-kongge[cnt-1]-1)/2;
for(j=1;j<=t;j++){
temp=word[i][j+kongge[cnt-1]];
word[i][j+kongge[cnt-1]]=word[i][a[i]-j];
word[i][a[i]-j]=temp;//使最后一个单词逆转
}
}
for(i=0;i<n;i++)
puts(word[i]);
printf("\n");
}
return 0;
}