7-6 字符串长度排序--string类的使用 总结

7-6 字符串排序--string类的使用(30 分)

先输入你要输入的字符串的个数。然后换行输入该组字符串。每个字符串以回车结束,每个字符串不多于一百个字符。 如果在输入过程中输入的一个字符串为“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

提示:

根据输入的字符串个数来动态分配存储空间(采用new()函数)。每个字符串会少于100个字符。 测试数据有多组,注意使用while()循环输入。


分析:这题就是考的就是字符串长度排序问题,排序很简单,关键是“有多组测试数据”这个就很烦了,网上查到是用“EOF”的,思想应该是:测试数据是一个文本,末尾有EFO(-1)表示结束,通过对EOF的检测,来判断输入结束。一般网上做题,有多组数据输入的时候可能用EOF控制循环输入比较好。但是,自己输入多组测试数据的时候,死循环和它的效果是一样的。

  都写成函数了,复用性比较高,不过是老师写的大笑,这里面要学的挺多的,还有很多不熟悉

  排序以后直接调用库函数的快速排序吧,(新补充一下:sort函数也很好用,就三个参数,貌似比qsort简单一点)

  调用方式:

 
   
  • #include <stdlib.h>
  • qsort(待排序数组首地址 ,  数组中待排序元素数量  , 各元素的占用空间大小  , 指向函数的指针);
  • https://www.cnblogs.com/sjy123/p/3287817.html 这里面有关于快速排列的详细介绍,写的挺好,以后用到,再看吧                  
#include<iostream>
#include<stdlib.h>
using namespace std;


int cmp(const void*a,const void*b)
{
    return *(int*)a-*(int*)b;///升序
}


int main()
{
    int i;
    int a[10]={10,9,8,7,6,5,4,3,2,1};
    qsort(a,10,sizeof(int),cmp);
    for(i=0;i<10;i++)
        cout<<a[i]<<endl;
    return 0;
}

#include <iostream>
#include <string>

using namespace std;

string  *inputstring(int &number) ;
void sortstring(string *strArray, int number) ;
void printstring(string *strArray, int number) ;
void freeStrArray(char **strArray, int number) ;


int main()
{
    int n1, n2 ;
    string *strArray1 ;
    while(1)
    {
        strArray1 = inputstring(n1) ;
        sortstring(strArray1, n1) ;
        //cout << endl << "Sorted string is:" << endl ;
        printstring(strArray1, n1) ;

    }

    delete[] strArray1 ;

    return 0;
}


string *inputstring(int &number)
{
    string *strArray ;
    char  strTmp[100], ch ;
    int i ;
    cin >> number ;
    cin.get(ch) ;
    strArray = new string [number] ;
    for(i=0 ; i<number ; i++)
    {
        cin.getline(strTmp, 100);  ///必须是字符指针
        strArray[i] = strTmp ;    ///strTmp是一个字符数组
        if(strArray[i] =="stop" )
            break ;

    }
    number = i ;
    return strArray ;
}

void sortstring(string *strArray, int number)
{
    string pstrTmp ;

    for(int i=0 ; i<number-1 ; i++)
    {
        for(int j=i+1  ; j<number ; j++)
        {
            if(strArray[i].length()>strArray[j].length())
            {
                pstrTmp = strArray[i] ;
                strArray[i] = strArray[j] ;
                strArray[j] = pstrTmp ;
            }
        }
    }
}

void printstring(string *strArray, int number)
{
    for(int i=0 ; i<number ; i++)
        cout << strArray[i] << endl ;
    //cout << endl ;
}


  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值