编程题#7:字符串排序(C++程序设计第10周)
2016-02-16 21:55
483 查看
描述
请按照要求对输入的字符串进行排序。
输入
第一行是正整数T,表示测试数据的组数
每组测试数据输入共两行,
第一行是正整数N,表示字符串个数
第二行是N个字符串, 字符串间用空格分离
输出
对于每组测试数据,先输出一行:
Case: n
如对第一组数据就输出Case: 1
第二行按照字符串长度从小到大排序之后输出N个字符串,字符串之间以空格间隔(不会出现字符串长度相同的情况)
第三行按照字符串首字符ASCII码序从小到大排序之后输出N个字符串,字符串之间以空格间隔(不会出现字符串首字母相同的情况)
样例输入
样例输出
源码
请按照要求对输入的字符串进行排序。
#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个字符串,字符串之间以空格间隔(不会出现字符串首字母相同的情况)
样例输入
2 4 a bnss ds tsdfasg 5 aaa bbbb ccccd sa q
样例输出
Case: 1 a ds bnss tsdfasg a bnss ds tsdfasg Case: 2 q sa aaa bbbb ccccd aaa bbbb ccccd q sa
源码
#include <iostream> #include <string> #include <list> using namespace std; class A//定义类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 A& a1, const A& a2) { return a1.get_size() < a2.get_size(); } template <class Iterator, class Function>//函数模板 void Show(Iterator begin, Iterator end, Function print) { for (Iterator iterator1 = begin; iterator1 != end; iterator1++) { print(*iterator1); } } class Print //函数对象类 { public: void operator() (const A& a) { cout << a.get_name() << " "; } }; template <class A> //函数对象类模板 struct MyLarge { inline bool operator() (const A& a1, const A& a2) { return a1.get_name() < a2.get_name(); } }; 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();//如上已经重载的A类型的“<”号,按尺寸排序 Show(lst.begin(), lst.end(), Print());//Print()为函数对象,用途类似于函数指针或函数名字 cout << endl; lst.sort(MyLarge<A>());//按照函数对象的方式进行排序 Show(lst.begin(), lst.end(), Print()); cout << endl; lst.clear(); } return 0; }
相关文章推荐
- c++虚拟继承
- 编程题#6:MyString(C++程序设计第10周)
- 20160205.CCPP体系详解(0015天)
- 20160205.CCPP体系详解(0015天)
- C++查找数组中的最大值和最小值
- 20160203.CCPP体系详解(0013天)
- 20160204.CCPP体系详解(0014天)
- 20160203.CCPP体系详解(0013天)
- 20160204.CCPP体系详解(0014天)
- 20160202.CCPP体系详解(0012天)
- 20160202.CCPP体系详解(0012天)
- 编程题#5:计算数组的低3位之和(C++程序设计第10周)
- c++类的成员变量使用普通变量还是指针
- 用c语言代码编写的游戏“简易五子棋”
- 20160131.CCPP体系详解(0010天)
- 20160201.CCPP体系详解(0011天)
- 20160131.CCPP体系详解(0010天)
- 20160201.CCPP体系详解(0011天)
- 20160130.CCPP体系详解(0009天)
- 20160130.CCPP体系详解(0009天)