字符串排序--string類的使用


 

  最近幫他們做了一個簡單的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,會更加靈活多變。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM