• 字符串排序--string类的使用


      最近帮他们做了一个简单的c++的题目,以前做过,当时是借鉴的别人的代码,现在也忘得差不多了,不过思路还有,现在正好可以再温习一下。

     

    题目要求如下:

      先输入你要输入的字符串的个数。然后换行输入该组字符串。每个字符串以回车结束,每个字符串不多于一百个字符。 如果在输入过程中输入的一个字符串为“stop”,也结束输入。 然后将这输入的该组字符串按每个字符串的长度,由小到大排序,按排序结果输出字符串。如果存在多个字符串长度相同,则按照原始输入顺序输出。
      输入格式:
      字符串的个数,以及该组字符串。每个字符串以‘ ’结束。如果输入字符串为“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 = "
    ";  在下次使用时清除缓存 
                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,会更加灵活多变。

  • 相关阅读:
    试试SQLServer 2014的内存优化表
    备份数据库的时候设置 BufferCount 选项不正确导致 out of memory 的情况
    SQLSERVER复制优化之一《改变包大小》
    Tomcat配置域名和虚拟文件夹
    BZOJ 1798 [Ahoi2009]Seq 维护序列seq 线段树
    125 Valid Palindrome
    jquery.lazyload.js实现图片懒载入
    hdu 2176 取石子游戏
    算法练习--十进制 二进制互转
    JavaScript学习10:动态载入脚本和样式
  • 原文地址:https://www.cnblogs.com/yandashan666/p/10506702.html
Copyright © 2020-2023  润新知