码迷,mamicode.com
首页 > 编程语言 > 详细

字符串排序 墨迹了半天的自闭题目

时间:2019-07-20 21:51:10      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:scan   quit   code   ons   hint   两种   bre   循环   algorithm   

如果一道字符串的题不能让我自闭的话,那就两道

先输入你要输入的字符串的个数。然后换行输入该组字符串。每个字符串以回车结束,每个字符串少于一百个字符。如果在输入过程中输入的一个字符串为“stop”,也结束输入。
然后将这输入的该组字符串按每个字符串的长度,由小到大排序,按排序结果输出字符串。


Input 字符串的个数,以及该组字符串。每个字符串以‘\n’结束。如果输入字符串为“stop”,也结束输入. Output 将输入的所有字符串按长度由小到大排序输出(如果有“stop”,不输出“stop”)。

Sample Input
5
sky is grey
cold
very cold
stop
3
it is good enough to be proud of
good
it is quite good
Sample Output
cold
very cold
sky is grey
good
it is quite good
it is good enough to be proud of
Hint 根据输入的字符串个数来动态分配存储空间(采用new()函数)。每个字符串会少于100个字符。
测试数据有多组,注意使用while()循环输入。
 
 
 
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
#include<vector>
using namespace std;
const int maxn=2000;
int n,cnt;

bool cmp(string b,string c)
{
    return b.size()<c.size(); 
}

int main()
{
    while(cin>>n)
    {
        cin.ignore();// EOF
        vector<string> jack;
        jack.reserve(n);
        string a;
        for(int i=1;i<=n;i++)
        {
            getline(cin,a);//读入一整行 
            if(a=="stop")//string数组每一个都是一坨字符串 
            {
                break;
            }
            jack.push_back(a);//STL教学式使用 
        }
        sort(jack.begin(),jack.end(),cmp);
        
        for(int i=0;i<jack.size();i++)
        {
            cout<<jack[i];
            if(i!=jack.size()) cout<<endl;
        }
        
    }
    return 0;
}

cin.ignore()函数是C++标准输入流(cin)中的一个方法。cin.ignore()函数中有两个参数,分别为数值型的a 和 字符型的 ch ,即cin.ignore( a, ch )。它表示从输入流 cin 中提取字符,提取的字符被忽略,不被使用。而每抛弃一个字符,它都要进行计数和比较字符:如果计数值达到 a 或者被抛弃的字符是 ch ,则cin.ignore() 函数执行终止;否则,它继续等待。

它的一个常用功能就是用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。例如可以这么用,cin.ignore(1024, ‘\n‘),通常把第一个参数设置得足够大,这样实际上是为了只有第二个参数 ‘\n‘ 起作用,所以这一句就是把回车(包括回车)之前的所以字符从输入缓冲流中清除出去。

如果默认不给参数的话,默认参数为cin.ignore(1, EOF),即把EOF前的1个字符清掉,没有遇到EOF就清掉一个字符然后结束。
---------------------
作者:micro小宝
来源:CSDN
原文:https://blog.csdn.net/wxbmelisky/article/details/48596881
版权声明:本文为博主原创文章,转载请附上博文链接!

 

 

string中有两个函数:reserve()和resize(),最近细细的看了下这两个函数的使用,记录下来。

    reserve为容器预留足够的空间,避免不必要的重复分配,分配空间大于等于函数的参数,影响capacity。

    resize调整容器中有效数据区域的尺寸,如果尺寸变小,原来数据多余的截掉。若尺寸变大,不够的数据用该函数第二个参数填充,影响size。

 

需要连续从标准输入读取数据时,可以采用下面两种不同的方式判断文件结束

int i;
while(scanf("%d",&i) != EOF){do whatever...}
while(cin >> i){do whatever...}


首先看scanf,当成功读取时返回读取的项的数目,如:scanf("%d %d",&i,&j)返回2,scanf("%d %f %s",&i, &f, c)返回3。这个数目可以是你希望读取的项数,也可能小于希望读取的项数,在匹配失败时返回0(如:用scanf("%d",&i)接收整数而输入是英文字母时就返回0)。需要注意的是用while(scanf("%d",&i) != EOF)时,接收到像876652098643267843超过int型取值范围的数时循环也会继续执行;相同的情况出现在while(cin >> i)上时循环会立即结束。
---------------------
作者:candj
来源:CSDN
原文:https://blog.csdn.net/candj/article/details/4419585
版权声明:本文为博主原创文章,转载请附上博文链接!

 

字符串排序 墨迹了半天的自闭题目

标签:scan   quit   code   ons   hint   两种   bre   循环   algorithm   

原文地址:https://www.cnblogs.com/WHFF521/p/11219053.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!