题目描述
给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格,前后没有空格。 比如: (1) “hello xiao mi”-> “mi xiao hello”
输入描述:
输入数据有多组,每组占一行,包含一个句子(句子长度小于1000个字符)
输出描述:
对于每个测试示例,要求输出句子中单词反转后形成的句子
示例1
输入
hello xiao mi
输出
mi xiao hello
解题代码:
#include <iostream> #include <string> using namespace std; string transfer(string s) { int len=s.length(); for(int i=0;i<len/2;i++) { char temp=s[i]; s[i]=s[len-i-1]; s[len-i-1]=temp; } return s; } int main(){ string str; getline(cin,str); string temp; int len=str.length(); int start=0,end=0; for(int i=0;i<len;i++) { if(str[i]==' '||i==len-1) { if(i==len-1) { end=i; } else { end=i-1; } string substr; for(int j=start;j<=end;j++) { substr +=str[j]; } temp+=transfer(substr);//反转句子内的单词 if(i!=len-1) { temp+=' '; start=i+1; }else { break; } } } cout<<transfer(temp)<<endl;//把整个句子当成一个单词进行反转 return 0; }
值得注意的点:1、接受带空格的字符串输入时,不能直接只用cin>>str;这样只能接受第一个空格之前的字符串,本文用的是getline(cin,str);
2、解题思路,先反转句子内部的每一个单词,再把整个句子当作一个单词反转,这样在局部和整体各反转一次,就巧妙的实现了单词内正序,单词间倒序。