最近幫他們做了一個簡單的c++的題目,以前做過,當時是借鑒的別人的代碼,現在也忘得差不多了,不過思路還有,現在正好可以再溫習一下。
題目要求如下:
先輸入你要輸入的字符串的個數。然后換行輸入該組字符串。每個字符串以回車結束,每個字符串不多於一百個字符。 如果在輸入過程中輸入的一個字符串為“stop”,也結束輸入。 然后將這輸入的該組字符串按每個字符串的長度,由小到大排序,按排序結果輸出字符串。如果存在多個字符串長度相同,則按照原始輸入順序輸出。
輸入格式:
字符串的個數,以及該組字符串。每個字符串以‘\n’結束。如果輸入字符串為“stop”,也結束輸入.
輸出格式:
可能有多組測試數據,對於每組數據, 將輸入的所有字符串按長度由小到大排序輸出(如果有“stop”,不輸出“stop”)。
輸入樣例:
4
faeruhyytrjh tjytj
hsrthts hjnshtgfhs
stop
3
htrskbns
bsartanjsf tyjndyt
nsr jj jtey
輸出樣例:
faeruhyytrjh tjytj
hsrthts hjnshtgfhs
htrskbns
nsr jj jtey
bsartanjsf tyjndyt
好,下面先把代碼貼出來
#include<iostream> using namespace std; void sort(string *a, int n);//sort函數進行排序 字串指針a 字串數量n int main(){ int n,i,j = 0; string b; begin: while(scanf("%d",&n)!=' '){ getchar(); //獲取輸入的n的值 注意它是讀取單一字符的 string *p = NULL;//初始化指針 p=new string[n];//為指針分配動態空間 for(i = 0;i < n; ++i){ //b = "\n"; 在下次使用時清除緩存 getline(cin,b); if(b != "stop"){ p[j] = b; j++; }else{ break; } } sort(p,j); cout<<" "<<endl; for(i = 0;i < j;++i){ cout<<p[i]<<endl; } } goto begin; return 0; } /** *排序采用冒泡排序法 */ void sort(string *a,int n){ int i,j; string b; for(i = 1;i < n;++i){ for(j = 0;j < n-i;++j){ if(a[j].size()>a[j + 1].size()){//size 獲取字串長度(大小) b=a[j]; a[j]=a[j + 1]; a[j + 1]=b; } } } }
這道題的思路其實不是很難,就是在實際操作的時候會遇到一些問題。
1、首先,在輸入的時候,可以循環用cin輸入,但是不可以用gets,因為gets無法以空格為結束來終止輸入。
2、自我感覺使用快排會更快一點,但是鑒於現在輸入的數據量的關系,冒泡排序也還可以。
3、在這段代碼里我用到了getline,這就是比較偷懶的行為,建議不要過多使用它,多使用cin.getline,會更加靈活多變。