C++输入几个单词 将字符串按字典序排序输出

img

img

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
    int n = 0;
    cin >> n;
    vector<string> ve;
    cin.get();
    while (n--) {
        string s;
        getline(cin, s);
        ve.push_back(s);
    }
    sort(ve.begin(), ve.end());
    for (int i = 0; i < ve.size(); ++i) {
        cout << ve[i] << endl;
    }
    return 0;
    
}

简单的方法就是这样了.要是不想用标准库也行,不过代码会更长一点


#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
bool cmp(string a,string b){
    return a < b; //按字典序从小到大排列 
} 

int main()
{
    int n=0;
    cin>>n;
    string s[n];
for (int i=0;i<n;i++)
{
    cin>>s[i]; 
}
    sort(s,s+n,cmp);
    for(int i = 0;i < n;i++)
    {
        cout << s[i]<<" "<<endl;
    }
    return 0;
}

这已经是最简单了,不能再简单了,大一也应该能看懂了吧.


#include<iostream>
#include<vector>
#include<string>
using namespace std;

int compare(string s1, string s2) {
    int len1 = s1.length(),
        len2 = s2.length();
    int i, j;
    for (i = 0, j = 0; i < len1 && j < len2; i++, j++) {
        if (s1.at(i) == s2.at(j)) 
            continue;
        else
            return s1.at(i) - s2.at(j);
    }
    if (i < len1)
        return s1.at(i);
    else if (j < len2)
        return -1*s2.at(j);
    else
        return 0;
}

void swap(string& s1, string& s2) {
    string s = s1;
    s1 = s2;
    s2 = s;
}
int main() {
    vector<string>v;
    int n,i=0; 
    cin >> n;
    cin.get();//吃掉 换行符 \n
    string str;
    while (i++<n) {
        getline(cin, str);
        v.push_back(str);
    }
    int  j,mark;
    for (i = 0; i < n - 1; i++) {
        mark = 0;
        for (j = n - 1; j > i; j--) {
            if (compare(v[j], v[j-1])<0) {// 升序
                swap(v[j], v[j - 1]);
                mark = 1;
            }
        }
        if (!mark) break;
    }
    for (i = 0; i < n; i++) {
        cout << v[i] << endl;
    }
}
/*
3
Bye!
Beijing Hotel.
bilibili
*/