紫书刷题进行中,题解系列【GitHub|CSDN】
例题5-3 UVA10815 Andy’s First Dictionary(17行AC代码)
思路分析
给定若干行字符串,按字典序输出不重复的单词
- 字典序排列和去重:定义
set<string> dict;
存储词典,自动去重且按字典序排列 - 可用
getline
读入每一行,将其字母均转为小写,非字母转为空格,拼接文本 - 可用
stringstream
分割空格间隔的字符串
注意点
- 拼接每一行时注意加上空格,避免首尾直接相接,照成错误单词
AC代码(C++11,set)
#include<bits/stdc++.h>
using namespace std;
string text, s;
set<string> dict; // 词典
int main() {
while (getline(cin, s)) {
for (auto& ch : s) {
if (isalpha(ch)) ch = tolower(ch); // 替换小写
else ch = ' '; // 替换空格
}
text += " "+s; // 拼接文本,注意空格,避免两行尾首直接相连
}
stringstream input(text); // 按空格分割
while (input >>s) dict.insert(s); // 插入去重
for (auto p : dict) cout <<p <<endl;
return 0;
}