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 ;
}