最近帮他们做了一个简单的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,会更加灵活多变。