@root

CPP 刷题王 2024-07-21 10:27:51 5

求助!

#include <bits/stdc++.h>
using namespace std;
multiset<string> st;
int main() {
    int n;
    cin >> n;
    getchar();
    
    for (int i = 1; i <= n; i++) {
        string a;
        getline(cin, a);
        cout << i << endl;
        st.insert(a);
    }
    cout << st.size() << endl;
    multiset<string>::iterator it;
    it = st.begin();
    while (it != st.end()) {
        cout << *it << endl;
        it++;
    }
    return 0;
}
{{ vote && vote.total.up }}

共 6 条回复

CPP 刷题王

@root @Brilliance thx,and so,Maybe this way is wrong

Brilliance 紫罗兰

这个可以map或者字典树解决

root 站长
#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;
    getchar(); // 消耗换行符
    
    set<string> bookSet;
    
    for (int i = 0; i < n; ++i) {
        string bookName;
        getline(cin, bookName);
        bookSet.insert(bookName);
    }
    
    vector<string> books(bookSet.begin(), bookSet.end());
    
    // 从大到小排序
    sort(books.begin(), books.end(), greater<string>());
    
    cout << books.size() << endl;
    
    for (const auto& book : books) {
        cout << book << endl;
    }
    
    return 0;
}
root 站长

我用 ai 给你优化了一下

root 站长

好的,那我们来分析一下你提供的代码,看看是否有需要改进的地方。

代码功能分析

  1. 读取输入

    • 首先读取一个整数 n,表示接下来会有 n 行字符串输入。
    • 使用 getline 函数逐行读取字符串,并将其插入到 multiset<string> 中。
  2. 输出

    • 输出每次插入操作的序号。
    • 最后输出 multiset 的大小和其中所有元素。

代码问题与优化

  1. 使用 getchar()

    • 在读取整数 n 后,你使用了 getchar() 来消耗换行符。这是为了确保后续的 getline 能正确读取整行字符串。
  2. 多余的输出

    • 每次插入操作时,你输出了当前序号,这在实际应用中可能不是必要的。如果只是为了调试,可以保留;否则可以去掉。
  3. 迭代器遍历

    • 使用迭代器遍历并输出 multiset 中的所有元素,这是正确且常见的方法。

优化建议

  • 如果不需要调试信息,可以去掉每次插入时输出序号的部分。
  • 可以考虑使用范围循环(range-based for loop)来简化遍历和输出部分。

以下是优化后的代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;
    getchar(); // 消耗换行符
    
    multiset<string> st;
    
    for (int i = 0; i < n; ++i) {
        string a;
        getline(cin, a);
        st.insert(a);
    }
    
    cout << st.size() << endl;
    
    for (const auto& str : st) {
        cout << str << endl;
    }
    
    return 0;
}

改进点总结:

  1. 去掉了每次插入时输出序号的部分。
  2. 使用范围循环简化了遍历和输出部分,使代码更简洁易读。

如果你还有其他问题或需要进一步优化,请告诉我!

CPP 刷题王