這是到很常見的題目,非常簡單,但你用到資料結構了嗎,或者說你用對了嗎?
通過這道題,你可以掌握:
題目:輸入乙個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。
句子中單詞以空格符隔開。標點符號和普通字母一樣處理。
例如輸入「i am a student.」,則輸出「student. a am i」。
思路
一、獲取字串
首先要能夠獲取到使用者輸入的一串字串,有兩點需要注意:
1.如果使用cin空格之後的字串不被輸出,如下圖
解決方法:使用cin.getline(str,length)
2.由於使用者輸入的字串長度一般不會和我們創造的字元陣列長度一樣,所以如果採用傳統的i
如下圖
解決方法:使用strlen(str)獲取字元陣列有效長度。
下面是使用者輸入輸出的**
char str[100];
//輸入提示
cout<
二、翻轉實現了輸入輸出後,就是關鍵的翻轉字串了。
怎樣進行翻轉?利用字元陣列的角標變換???拜託,這不是當初我們剛剛學習c語言時採用的方法嗎,而對於學過資料結構的人來說,第一反應想到的是這麼個寶貝——棧!
先進後出,這是棧的特性!這在前面c語言強化(二)設計可以求最小元素的棧講過。
把先輸入的字串放進棧中,最後出來的順序不就翻轉了嗎?
所以我們要做的就是把字串分割成乙個個子串,然後塞進去棧中,再取出來,搞定!
翻轉函式**
void reversestr(char * str){
//擷取,使用棧結構實現翻轉輸出
char * p;
vectorvt;
const char * split = " ";
p = strtok (str,split);
while(p!=null) {
//cout<0){
cout<
完整源**
#include #include#include #include#include using namespace std;
/**翻轉句子中單詞的順序。
題目:輸入乙個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。
句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。
例如輸入「i am a student.」,則輸出「student. a am i」。
思路1.使用者輸入一串字串,把它輸出來
2.擷取,使用棧結構實現翻轉輸出
*/void reversestr(char * str){
//擷取,使用棧結構實現翻轉輸出
char * p;
vectorvt;
const char * split = " ";
p = strtok (str,split);
while(p!=null) {
//cout<0){
cout<>str;//不可以這樣!
cin.getline(str,100);
cout<
//輸出長度
cout<
之所以要學習資料結構,就是因為很多現實問題都是滿足資料結構模型的。比如此題的【翻轉——棧】 翻轉句子中單詞的順序
題目 輸入乙個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。例如輸入 i am a student.則輸出 student.a am i 分析 由於編寫字串相關 能夠反映程式設計師的程式設計能力和程式設計習慣,與字串相關的問題...
翻轉句子中單詞的順序
程式設計師面試題精選 07 翻轉句子中單詞的順序 題目 輸入乙個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。例如輸入 i am a student.則輸出 student.a am i 分析 由於編寫字串相關 能夠反映程式設...
翻轉句子中單詞的順序
翻轉句子中單詞的順序。題目 輸入乙個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。例如輸入 i am a student.則輸出 student.a am i 第乙個想法是借助棧實現,每解析乙個單詞壓棧,解析完依次出棧,要求額...