n个字符串按照字典序排列

题目描述
给定n个字符串,请对n个字符串按照字典序排列。
输入描述:
输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。

输出描述:
数据输出n行,输出结果为按照字典序排列的字符串。

输入例子:
9
cap
to
cat
card
two
too
up
boat
boot

输出例子:
boat
boot
cap
card
cat
to
too
two
up

做这道题之前先来看一下C++中的库函数sort():
STL里面有个sort函数,可以直接对数组排序,复杂度为n*log2(n)。sort()定义在在头文件中。sort函数是标准模板库的函数,已知开始和结束的地址即可进行排序,可以用于比较任何容器(必须满足随机迭代器),任何元素,任何条件,执行速度一般比qsort要快。另外,sort()是类属函数,可以用于比较任何容器,任何元素,任何条件。具体事例如下:

1、sort(begin,end),表示一个范围:

#include <algorithm>
#include <iostream>using namespace std;
int main()
{int a[10] = { 2, 4, 1, 23, 5, 76, 0, 43, 24, 65 };for (int i = 0; i<10; i++)cout << a[i] << endl;sort(a, a + 10);cout << endl;for (int i = 0; i<10; i++)cout << a[i] << endl;return 0;
}

注意:缺省是升序排序。sort中一个改变排序顺序的例子如下(降序):

#include <algorithm>
#include <iostream>using namespace std;bool cmp(int a, int b)
{return a > b;
}
int main()
{int a[10] = { 2, 4, 1, 23, 5, 76, 0, 43, 24, 65 };for (int i = 0; i<10; i++)cout << a[i] << endl;sort(a, a + 10, cmp);cout << endl;for (int i = 0; i<10; i++)cout << a[i] << endl;return 0;
}

这个函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。也就是说,排序的区间是[a,b)。简单来说,有一个数组int a[100],要对从a[0]到a[99]的元素进行排序,只要写sort(a,a+100)就行了,默认的排序方式是升序。如需要对数组t的第0到len-1的元素排序,就写sort(t,t+len);对向量v排序也差不多,sort(v.begin(),v.end());排序的数据类型不局限于整数,只要是定义了小于运算的类型都可以,比如字符串类string。

假设自己定义了一个结构体node:

struct node{int a;int b;double c;
};

有一个node类型的数组node arr[100],想对它进行排序:先按a值升序排列,如果a值相同,再按b值降序排列,如果b还相同,就按c降序排列。就可以写这样一个比较函数:

bool cmp(node x,node y)
{if(x.a!=y.a)  return x.a //升序排列if(x.b!=y.b)  return x.b>y.b; //降序排列return  return x.c>y.c;  //降序排列
} 

那么现在就来做上面的题吧:

#include <algorithm>
#include <iostream>
#include <string>using namespace std;bool cmp(string a, string b)
{return a < b;
}
int main()
{int num;while(cin >> num){getchar(); //这个要加上,不然会吃掉一个字符串string* s = new string[1000];for (int i = 0; i < num; i++){getline(cin,s[i],'\n');}sort(s,s+num,cmp);for (int i = 0; i < num; i++){cout << s[i] << endl;}}   return 0;
}

或者:

#include <vector>
#include <iostream>
#include <string>
#include <algorithm>using namespace std;bool cmp(string a, string b)
{return a < b;
}int main()
{int num;string str;vector<string> v;while (cin >> num){while (num--){cin >> str;v.push_back(str);}sort(v.begin(),v.end(),cmp);cout << endl;for (int i = 0; i < v.size(); i++){cout << v[i] << endl;}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423164.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二叉树的层序遍历详细讲解(附完整C++程序)

加qq1126137994 微信liu1126137994 一起学习更多技术 1、原理&#xff1a; 层序遍历所要解决的问题很好理解&#xff0c;就是按二叉树从上到下&#xff0c;从左到右依次打印每个节点中存储的数据。如下图&#xff1a; 按层序遍历的原则&#xff0c;打印顺序依次应该是&…

不同DPI下窗体的自适应的有关注意点(转)

不同DPI下窗体的自适应的有关注意点&#xff08;转自&#xff1a;http://hi.baidu.com/superkinger/blog/item/79e047ec6c80563526979197.html&#xff09; 1. 在设计窗体的时候需要考虑是否允许程序在不同DPI自适应窗体&#xff0c;不自适应的优点是在不同的DPI下看到的…

【C++深度剖析教程30】C++中抽象类和接口

加qq1126137994 微信&#xff1a;liu1126137994 1、面向对象中的抽象概念; 在现实中&#xff0c;需要知道具体的图形类型才能知道如何求面积&#xff0c;但是对于抽象的‘图形’&#xff0c;我们是没法求其面积的&#xff0c;而且对其求面积也是没有意义的&#xff1a; cl…

有效沟通力思维导图

有效沟通&#xff0c;适用于生活和工作中&#xff0c;甚至是孩子教育上面&#xff0c;分享一下&#xff1b;

[转]Microsoft Solution Framework 微软解决方案框架结构

本文转自&#xff1a;http://baike.baidu.com/view/1291436.htmMSF&#xff08;Microsoft Solution Framework&#xff09;微软解决方案框架结构是一组建立、开发和实现分布式企业系统应用的工作模型、开发准则和应用指南。它帮助企业融合商业和技术的目标&#xff0c;降低采用…

指针的大小与什么有关

指针的大小与什么有关&#xff1f; cpu位数&#xff08;32位数4字节&#xff0c;64位数8字节&#xff09;操作系统位数&#xff08;32位数4字节&#xff0c;64位数8字节&#xff09;编译器的位数&#xff08;32位数4字节&#xff0c;64位数8字节&#xff09; 当上述3种位数不…

数据结构思维导图

学习是一个不断渐进的过程&#xff0c;最近整理了一下数据结构思维导图&#xff0c;分享一下&#xff0c;后续更新中 总结&#xff1a;算法实际上属于&#xff0c;数据建模&#xff0c;首先是问题的抽象&#xff0c;采用数学公式来表示&#xff08;数据建模&#xff1a;将问题…

(转)代理模式(Proxy)

原文地址&#xff1a;http://www.cnblogs.com/QinBaoBei/archive/2010/05/18/1737866.html 为了深刻点理解代理模式&#xff0c;我们先来看一个 Demo &#xff0c; 首先这个 Demo 是用来测试 QQ 号码是否在线&#xff0c; 这里涉及到的内容是 Web 服务的使用&#xff0c; 这个 …

【C++深度剖析教程31】被遗弃的多重继承

加qq1126137994 微信&#xff1a;liu1126137994 C中是否允许一个类继承多个父类&#xff1f; C支持编写多重继承的代码&#xff1a; 一个子类可以拥有多个父类子类拥有所有父类的成员变量子类继承父类所有的成员函数子类对象可以当做任意父类对象使用 多重继承的语法规则&a…

zookeeper思维导图

之前用word文档记笔记&#xff0c;但是没有思维导图清晰&#xff0c;又整理了一下&#xff0c;分享一下&#xff1b;

管理软件本质论

我们上管理软件到底是为了什么&#xff1f;1 为员工提供自动化工具&#xff0c;可以让他们节省出更多的时间可以做更多的工作&#xff1f;2 可以通过管理软件的互联网联网特性或局域网联网特性&#xff0c;让部门和部门之间、总部和分公司之间按业务流程通常运营&#xff1f;2 …

【C++深度剖析教程32】new/malloc区别 delete/free区别

加qq1126137994 微信&#xff1a;liu1126137994 一起学习更多技术&#xff01;&#xff01;&#xff01; 1、new与malloc的区别&#xff1a; new是关键字&#xff0c;它是C语言的一部分&#xff0c;而malloc是由C库提供的函数new分配的内存的单位是具体的类型大小&#xff0c…

redis 思维导图

之前整理的redis 思维导图&#xff0c;分享一下&#xff0c;后续持续更新;

软件汉化教程

看到网上经常有人问汉化方面的东西&#xff0c;我今天也来灌水一篇&#xff0c;来个汉化扫盲教程。写的不好的地方欢迎大家指正&#xff01;OK&#xff0c;现在我们进入正题。我这里所说的汉化&#xff0c;是指汉化 Windows 下的 PE 文件&#xff0c;把其他语言界面的程序翻译为…

图的DFS深度遍历

最近复习了一下图的内容&#xff0c;记录一下&#xff0c;后续添加详解&#xff08;无向图的深度遍历&#xff09; package com.qey.learn;import java.util.ArrayList; import java.util.Arrays;/*** ClassName graph* Description* Author qianxl* Date 2021-03-06 17:18* V…

【C++深度剖析教程33】C++中的构造函数与析构函数是否可以为虚函数

加qq1126137994 微信&#xff1a;liu1126137994 一起学习更多技术&#xff01;&#xff01;&#xff01; 问题一&#xff1a;构造函数与析构函数可以成为虚函数么&#xff1f; 答案&#xff1a; 1、构造函数不可以成为虚函数 因为在构造函数执行结束后&#xff0c;虚函数表…

网站切图初学

先做一个简单的说明为什么选择Photoshop软件而没有选择Firework软件。Friework Dreamweaver Flash号称网页制作三剑客&#xff0c;Friework与Dreamwaver整合得更为紧密&#xff0c;在这里只所以选择photoshop只是因为我的偏好&#xff0c;况且我对 firework软件使用的次数很少&…

【C++深度剖析教程34】C++中的强制类型转换dynamic_cast

加qq1126137994 微信&#xff1a;liu1126137994 一起学习更多技术&#xff01;&#xff01;&#xff01; C中的继承中&#xff0c;如何使用强制类型转换&#xff1f; 知识点&#xff1a; dynamic_cast是与继承相关的类型转换关键字dynamic_cast要求相关的类中必须有虚函数dy…

main函数的参数的含义

转载自&#xff1a;点击链接 链接2 加qq1126137994 微信&#xff1a;liu1126137994 一起学习更多技术&#xff01;&#xff01;&#xff01; 最近学习服务器网络编程&#xff0c;遇到了一个问题&#xff0c;main函数的参数&#xff0c;特意整理资料记录之&#xff01;&#…