给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。
输出格式:每个测试用例的输出占一行,输出倒序后的句子。
题目来自http://pat.zju.edu.cn/contests/pat-b-practise/1009
#include<iostream>
#include<cstring>
using namespace std;
void reverse_real(char* data,int num_data) //负责字符串旋转功能
{
char temp;
for(int i=0,j=num_data-1;i<j;++i,--j)
{
temp=data[i];
data[i]=data[j];
data[j]=temp;
}
}
int main()
{
char words[81];
cin.getline(words,81);
int length=strlen(words);
int first=0;
while(first<length && words[first]==' ') //检查字符串是否为空串或者全是空格
first++;
if(first==length)
{
cout<<words;
return -1;
}
reverse_real(words,length); //先将字符串整体翻转
int num_char=0;
char* p_start=words;
for(int i=0;i<=length;++i) //再挨个旋转单词
{
if(words[i]==' ' || words[i]=='\0')
{
reverse_real(p_start,num_char);
num_char=0;
p_start=&words[i+1];
}
else
num_char++;
}
cout<<words<<endl;
return 0;
}