* 期末考试 编程题#7:字符串排序(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;函数对象作参数)
来源:互联网 发布:eminem与光明会 知乎 编辑:程序博客网 时间:2024/05/16 12:55
编程题#7:字符串排序
来源: 北京大学在线程序评测系统POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)
总时间限制: 1000ms 内存限制: 1024kB
描述
请按照要求对输入的字符串进行排序。
#include <iostream>#include <string>#include <list>using namespace std;class A{private: string name;public: A(string n) :name(n){} friend bool operator < (const class A& a1, const class A &a2); friend bool operator == (const class A &a1, const class A &a2){ if (a1.name.size() == a2.name.size()) return true; else return false; } friend ostream & operator << (ostream &o, const A &a){ o << a.name; return o; } string get_name() const{ return name; } int get_size() const{ return name.size(); }};// 在此处补充你的代码int main(int argc, char* argv[]){ list<A> lst; int ncase, n, i = 1; string s; cin >> ncase; while (ncase--){ cout << "Case: "<<i++ << endl; cin >> n; for (int i = 0; i < n; i++){ cin >> s; lst.push_back(A(s)); } lst.sort(); Show(lst.begin(), lst.end(), Print()); cout << endl; lst.sort(MyLarge<A>()); Show(lst.begin(), lst.end(), Print()); cout << endl; lst.clear(); } return 0;}
输入
第一行是正整数T,表示测试数据的组数
每组测试数据输入共两行,
第一行是正整数N,表示字符串个数
第二行是N个字符串, 字符串间用空格分离
输出
对于每组测试数据,先输出一行:
Case: n
如对第一组数据就输出Case: 1
第二行按照字符串长度从小到大排序之后输出N个字符串,字符串之间以空格间隔(不会出现字符串长度相同的情况)
第三行按照字符串首字符ASCII码序从小到大排序之后输出N个字符串,字符串之间以空格间隔(不会出现字符串首字母相同的情况)
样例输入
24a bnss ds tsdfasg5aaa bbbb ccccd sa q
样例输出
Case: 1a ds bnss tsdfasga bnss ds tsdfasgCase: 2q sa aaa bbbb ccccdaaa bbbb ccccd q sa
程序解答:
#include <iostream>#include <string>#include <list>using namespace std;class A{private: string name;public: A(string n) :name(n){} friend bool operator < (const class A& a1, const class A &a2); friend bool operator == (const class A &a1, const class A &a2){ if (a1.name.size() == a2.name.size()) return true; else return false; } friend ostream & operator << (ostream &o, const A &a){ o << a.name; return o; } string get_name() const{ return name; } int get_size() const{ return name.size(); }};// 在此处补充你的代码bool operator < (const class A& a1, const class A &a2){ return(a1.get_size() < a2.get_size());}//此处参考 http://zh.cppreference.com/w/cpp/algorithm/for_each struct Sum...struct Print{ void operator()(A& a){ //cout << a.get_name() << " "; cout << a << " "; }};//此处参考 http://zh.cppreference.com/w/cpp/algorithm/for_each for_each...template<class InputIt, class UnaryFunction>UnaryFunction Show(InputIt first, InputIt last, UnaryFunction f){ for (; first != last; ++first) { f(*first); } return f;}template<class InputIt>struct MyLarge { bool operator()(const InputIt & a1, const InputIt & a2){ //按首字母比大小 return a1.get_name() < a2.get_name(); //return a1.get_name().at(0) < a2.get_name().at(0); //默认先比较的就是首字母 }};int main(int argc, char* argv[]){ list<A> lst; int ncase, n, i = 1; string s; cin >> ncase; while (ncase--){ cout << "Case: " << i++ << endl; cin >> n; for (int i = 0; i < n; i++){ cin >> s; lst.push_back(A(s)); } lst.sort(); Show(lst.begin(), lst.end(), Print()); cout << endl; lst.sort(MyLarge<A>()); Show(lst.begin(), lst.end(), Print()); cout << endl; lst.clear(); } return 0;}
其他补充说明参考:
http://blog.csdn.net/NNNNNNNNNNNNY/article/details/50677055
阅读全文
0 0
- * 期末考试 编程题#7:字符串排序(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;函数对象作参数)
- 期末考试 编程题#3:计算数列平方和(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;函数对象作参数)
- 期末考试 编程题#1:输出200(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;OpenJudge)
- * 期末考试 编程题#4:计算整数平方和(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;OpenJudge)
- 期末考试 编程题#6:MyString(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;OpenJudge)
- 期末考试 编程题#9:人群的排序和分类(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;类的继承)
- 期末考试 编程题#10:输出指定结果二(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;虚函数继承)
- * 期末考试 编程题#5:计算数组的低3位之和(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;for_each用法)
- 期末考试 编程题#2:输出指定结果一(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;OpenJudge)
- 期末考试 编程题#8:计算整数k(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;进制转换)
- 期末考试 编程题#11:数据库内的学生信息(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;STL编写)
- 类和对象 编程题#3(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;OpenJudge)
- 类和对象 编程题#1(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;OpenJudge)
- 类和对象 编程题#2(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;OpenJudge)
- * 继承与派生 编程题#1(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;OpenJudge)
- * 文件操作与模板 编程题#1(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;OpenJudge)
- ** 文件操作与模板 编程题#4: 字符串操作(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;OpenJudge)
- ** 标准模板库 STL-2 编程题#4: 字符串操作(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;OpenJudge)
- 针对USB_cam数据发送不给ORBSLAM2的问题解决方案是修改usb_cam-test.launch文件
- asterisk常用指令-整理
- verilog位拼接运算符细节问题
- 蓝桥杯—用筛法求N内的素数
- 技术型产品经理与系统设计
- * 期末考试 编程题#7:字符串排序(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;函数对象作参数)
- 福利 | 资料下载_AI创业公司入选行业榜单统计汇总(7份榜单,315家公司)
- mybaits中传入数组参数
- 转型AI产品经理,原来不需要学那么深的算法和数学模型
- 看AI产品经理如何介绍“计算机视觉”(基于实战经验和案例)
- 以 Facebook 的 wit.ai 为例讲解机器人对话平台(Bot Framework)
- 填槽与多轮对话 | AI产品经理需要了解的AI技术概念
- STM32单片机 Nucleo 开发板介绍,以及如何获取STM32开发板
- AI产品经理需要了解的语音交互评价指标