题目描述
输入一个可能包含若干(至少1个)单词的句子(可以假设每个单词之间有且仅有一个空格,标点符号视为单词的组成部分),输出每个单词逆置后的英文句子(参看样例输出)。
输入格式
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据输入一个字符串(长度不超过80),表示英文句子。
输出格式
对于每组测试,输出每个单词逆置后的英文句子。
输入输出样例
输入
1
emoclew era uoY
输出
welcome are You
#include<bits/stdc++.h>
using namespace std;
void Reverse(char *l,char *r){
while(l<r){
char t=*l;
*l=*r;
*r=t;
l++;
r--;
}
}
int main(){
int t;
cin>>t>>ws;
while(t--){
char str[85];
scanf("%[^\n]",str);
/* ^表示"非",[^\n]表示读入换行字符就结束读入,
scanf不能接收空格符,一接受到空格就结束读入,不能像gets()等函数一样接受一行字符串,
使用%[^\n]就可以读取一行,直到碰到‘\n’才结束读入。*/
getchar(); //从输入缓冲区里面读取一个字符,吸收空格
char *l=str; //定义头指针指向一个单词的首元素
for(int i=0;i<=strlen(str);i++){
char *r=str+i-1; //定义尾指针指向这个单词的尾元素
if(str[i]==' '||str[i]=='\0'){
Reverse(l,r);
l=str+i+1;
}
}
printf("%s\n",str);
}
return 0;
}