多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > php教程 > C語言強(qiáng)化(九)翻轉(zhuǎn)句子中單詞的順序

C語言強(qiáng)化(九)翻轉(zhuǎn)句子中單詞的順序

來源:程序員人生   發(fā)布時(shí)間:2015-05-28 08:38:44 閱讀次數(shù):4939次

這是到很常見的題目,非常簡單,但你用到數(shù)據(jù)結(jié)構(gòu)了嗎,或說你用對了嗎?


通過這道題,你可以掌握:

  • 如何將用戶的輸入,輸出到控制臺(tái)
  • 如何分割字符串
  • 如何正確使用數(shù)據(jù)結(jié)構(gòu)


題目:輸入1個(gè)英文句子,翻轉(zhuǎn)句子中單詞的順序,但單詞內(nèi)字符的順序不變。
句子中單詞以空格符隔開。標(biāo)點(diǎn)符號(hào)和普通字母1樣處理。

 例如輸入“I am a student.”,則輸出“student. a am I”。


思路

1、獲得字符串

首先要能夠獲得到用戶輸入的1串字符串,有兩點(diǎn)需要注意:

1.如果使用cin<<,輸出時(shí)會(huì)發(fā)現(xiàn)空格以后的字符串不被輸出,以下圖


解決方法:使用cin.getline(str,length)

2.由于用戶輸入的字符串長度1般不會(huì)和我們創(chuàng)造的字符數(shù)組長度1樣,所以如果采取傳統(tǒng)的i<str.size()去遍歷,會(huì)發(fā)現(xiàn)輸出很多個(gè)“燙”,由于數(shù)組沒有初始化

以下圖


解決方法:使用strlen(str)獲得字符數(shù)組有效長度。


下面是用戶輸入輸出的代碼

<span style="font-size:14px;"> char str[100]; //輸入提示 cout<<"請輸入,長度少于100"<<endl; //用戶輸入 cin.getline(str,100); cout<<"所輸入的字符串長度為:"; //輸出長度 cout<<strlen(str)<<endl; //輸出內(nèi)容 for(int i=0;i<strlen(str);i++){ cout<<str[i]; } cout<<endl;</span>

2、翻轉(zhuǎn)

實(shí)現(xiàn)了輸入輸出后,就是關(guān)鍵的翻轉(zhuǎn)字符串了。

怎樣進(jìn)行翻轉(zhuǎn)?利用字符數(shù)組的角標(biāo)變換???拜托,這不是當(dāng)初我們剛剛學(xué)習(xí)C語言時(shí)采取的方法嗎,而對學(xué)過數(shù)據(jù)結(jié)構(gòu)的人來講,第1反應(yīng)想到的是這么個(gè)寶貝――

先進(jìn)后出,這是棧的特性!這在前面C語言強(qiáng)化(2)設(shè)計(jì)可以求最小元素的棧講過。

把先輸入的字符串放進(jìn)棧中,最后出來的順序不就翻轉(zhuǎn)了嗎?

所以我們要做的就是把字符串分割成1個(gè)個(gè)子串,然后塞進(jìn)去棧中,再取出來,弄定!


翻轉(zhuǎn)函數(shù)代碼

<span style="font-size:14px;">void reverseStr(char * str){ //截取,使用棧結(jié)構(gòu)實(shí)現(xiàn)翻轉(zhuǎn)輸出 char * p; vector<char*> vt; const char * split = " "; p = strtok (str,split); while(p!=NULL) { //cout<<p; vt.push_back(p);//塞進(jìn)去棧中 p = strtok(NULL,split); //繼續(xù)分割字符串 } //利用棧結(jié)構(gòu)的特性,從上往下遍歷 while(vt.size()>0){ cout<<vt[vt.size()⑴]<<" "; vt.pop_back(); } cout<<endl; }</span>


完全源代碼

<span style="font-size:14px;">#include <stdio.h> #include<stdlib.h> #include <iostream> #include<sstream> #include <vector> using namespace std; /** 翻轉(zhuǎn)句子中單詞的順序。 題目:輸入1個(gè)英文句子,翻轉(zhuǎn)句子中單詞的順序,但單詞內(nèi)字符的順序不變。 句子中單詞以空格符隔開。為簡單起見,標(biāo)點(diǎn)符號(hào)和普通字母1樣處理。 例如輸入“I am a student.”,則輸出“student. a am I”。 思路 1.用戶輸入1串字符串,把它輸出來 2.截取,使用棧結(jié)構(gòu)實(shí)現(xiàn)翻轉(zhuǎn)輸出 */ void reverseStr(char * str){ //截取,使用棧結(jié)構(gòu)實(shí)現(xiàn)翻轉(zhuǎn)輸出 char * p; vector<char*> vt; const char * split = " "; p = strtok (str,split); while(p!=NULL) { //cout<<p; vt.push_back(p);//塞進(jìn)去棧中 p = strtok(NULL,split); //繼續(xù)分割字符串 } //利用棧結(jié)構(gòu)的特性,從上往下遍歷 while(vt.size()>0){ cout<<vt[vt.size()⑴]<<" "; vt.pop_back(); } cout<<endl; } void main() { /* 輸入輸出 */ char str[100]; //輸入提示 cout<<"請輸入,長度少于100"<<endl; //用戶輸入 //cin>>str;//不可以這樣! cin.getline(str,100); cout<<"所輸入的字符串長度為:"; //輸出長度 cout<<strlen(str)<<endl; //輸出內(nèi)容 //cout<<str<<endl; /* //不能這樣輸出! for(int i=0;i<100;i++){ cout<<str[i]; } */ for(int i=0;i<strlen(str);i++){ cout<<str[i]; } cout<<endl; reverseStr(str); system("pause"); }</span>

之所以要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),就是由于很多現(xiàn)實(shí)問題都是滿足數(shù)據(jù)結(jié)構(gòu)模型的。比如此題的【翻轉(zhuǎn)――棧】
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 久久天天躁狠狠躁夜夜中文字幕 | 久久综合九色综合欧美狠狠 | 在线免费福利 | 欧美日韩在线看 | 亚洲一区二区成人 | 久久久久久久岛国免费观看 | 国产午夜视频在线观看第四页 | 欧美xxxx性特级高清 | 在线日本韩国 | 久久亚洲精品久久久久 | 亚洲精品高清视频 | 欧美性黑人极品hd | 久久精品国产2020 | 中文字幕看片在线a免费 | 国产91精品一区二区 | 亚洲人成图片欧美人成图片 | 欧美在线精品一区二区三区 | 69av在线视频 | 羞羞网站在线播放 | 啪一啪在线视频 | 国产一区二区三区高清 | 性欧美一级毛片在线播放 | 亚洲欧美日韩国产精品一区 | 国产三级国产精品国产国在线观看 | 美国一级大毛片 | 欧美性视频一区二区三区 | 亚洲综合国产一区在线 | 国产91一区二区在线播放不卡 | 国产成人精品一区 | 日本1区2区3区电 | 爱爱视频网站免费 | a级片网 | 一区二区中文字幕在线观看 | 一级毛片一级毛片一级毛片一级毛片 | 素人259luxu在线观看暴露 | 一级片.| 欧美一区二区不卡视频 | 欧美xxxx性free| 成人区精品一区二区不卡亚洲 | 日本道在线视频 | h视频在线观看网站 |