輸入多個字符串,有些是對稱的,有些是不對稱的,請將那些對稱的字符串按從小到大的順序輸出。字符串先以長度論大小,若是長度相同,再以ASCII碼值爲大小標準。 ios
輸入多個字符串,有些是對稱的,有些是不對稱的,請將那些對稱的字符串按從小到大的順序輸出。字符串先以長度論大小,若是長度相同,再以ASCII碼值爲大小標準。 ios
輸入第一行是一個整數n(1<=n<=100),接下來n行是n個字符串,每一個字符串不大於200個字符。 算法
輸出對稱的那些串,而且要求按從小到大的順序輸出,每一個字符串佔一行。 安全
題目分析:函數
(1)定義一個string類型的向量容器spa
(2)將輸入的字符串反轉,看是否和原字符串相同,以此判斷字符是否對稱設計
(3)若對稱,則將該字符串插入到向量容器中code
(4)使用sort算法對向量元素排序,本身設計排序比較函數,把這個函數指定給sort算法blog
排序比較函數的具體方法是,判斷參與比較的沒兩個字符串的長度是否相等,若不相等則按長度從小到大的順序返回;若相等則以ASCII碼值爲排序標準,即按字符串從小到大排序排序
#include<iostream> #include<cstdio> #include<string> #include<vector> #include<algorithm> using namespace std; bool cmp(const string &s1, const string &s2)//使用const:由於引用傳參,比拷貝傳參的效率要高,const是由於只是比較,而沒有修改其內容。 { return s1.length() != s2.length() ? s1.length()<s2.length() : s1<s2; } int main() { int n; char ch; vector<string> v; cin >> n; scanf_s("%c", &ch);//吃掉n以後的換行符,vc使用scanf(),在vs2013中不安全,提示爲scanf_s(); string t, s; //while(n--) for (int k = 0; k<n; k++) { getline(cin, t);//cin>>s不能輸進空格 s = t; reverse(t.begin(), t.end()); if (t == s) { v.push_back(s); } } sort(v.begin(), v.end(), cmp); for (int i = 0; i<v.size(); i++) { cout << v[i] << endl; } return 0; }