用 set 去重并按 ASCII 字典序输出所有不同单词。
OJ: roj
题目 ID: 1185
难度:入门
标签:排序字符串集合输入输出python
创建: 2026-09-29 22:38
更新: 2026-10-05 04:41
题目描述
输入一行单词序列,相邻单词之间由 1 个或多个空格间隔。按字典序输出这些单词,重复的单词只输出一次(区分大小写)。数据范围:
思路
用 cin >> word 按任意空白切分单词,set<string> 自动去重并按键的 ASCII 顺序排序,最后遍历输出即可。
参考代码
Python 版:
python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-09-29 22:38
# update_at: 2026-09-29 22:40
import sys
def solve() -> None:
words = sys.stdin.buffer.read().split() # 按任意空白切分,天然吃掉 1 个或多个空格
# 输入只含字母,字节序与 ASCII 字典序一致(大写在前),所以直接用 set 去重、sorted 排序;
# 重复单词只留一份,最后一行也要有换行符,所以末尾补一个 b'\n'
sys.stdout.buffer.write(b'\n'.join(sorted(set(words))) + b'\n')
if __name__ == "__main__":
solve()C++ 版(同一算法):
cpp
/**
* Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
* rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
* rainboy的学习导航网站: https://idx.roj.ac.cn
* create_at: 2026-10-05 04:41
* update_at: 2026-10-05 04:41
*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
set<string> words; // 自动去重,并按 ASCII 字典序排序
string w;
while (cin >> w) { // 按任意空白切分,可处理 1 个或多个空格
words.insert(w);
}
for (auto it = words.begin(); it != words.end(); ++it) {
cout << *it << '\n';
}
return 0;
}