牛客網線上程式設計題——句子反轉(3)
阿新 • • 發佈:2018-11-26
題目描述
給定一個句子(只包含字母和空格), 將句子中的單詞位置反轉,單詞用空格分割, 單詞之間只有一個空格,前後沒有空格。 比如: (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; } stringsubstr; 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、解題思路,先反轉句子內部的每一個單詞,再把整個句子當作一個單詞反轉,這樣在區域性和整體各反轉一次,就巧妙的實現了單詞內正序,單詞間倒序。