【题目描述】
输入一行单词序列,相邻单词之间由1个或多个空格间隔,请按照字典序输出这些单词,要求重复的单词只输出一次。(区分大小写)
【输入】
一行单词序列,最少1个单词,最多100个单词,每个单词长度不超过50,单词之间用至少1个空格间隔。数据不含除字母、空格外的其他字符。
【输出】
按字典序输出这些单词,重复的单词只输出一次。
【输入样例】
She wants to go to Peking University to study Chinese
【输出样例】
Chinese
Peking
She
University
go
study
to
wants
方法一
#include<bits/stdc++.h>
using namespace std;
string str[1000]; //定义字符串数组
int main()
{
string s; //定义字符串
int cnt=0; //统计单词数
while(cin>>s) //输入单词
{
str[cnt]=s; //将单词存到字符串数组中
cnt++;
}
sort(str,str+cnt); //单词排序 sort定义从小到大排序
cout<<str[0]<<endl; //先输出第一个单词,然后依次用第二个单词和第一个单词比较,第三个
//和第二个比较,以此类推
for(int i=1;i<=cnt;i++)
{
if(str[i]!=str[i-1]) //从第二个单词开始,每次和上一个单词比较是否相同,不相同就输出
cout<<str[i]<<endl;
}
return 0;
}
方法二
#include<bits/stdc++.h>
using namespace std;
int main()
{
set<string> s; //定义自动去重排序字符串
for(int i=0;i<100;i++)
{
char x[20];
cin>>x; //输入单词
s.insert(x); //将单词插入到字符串s中,进行自动去重排序
}
getchar(); //空读输入n后的换行
set<string> ::iterator it;
for(it=s.begin();it!=s.end();it++) //遍历字符串s,依次输出单词
cout<<*it<<endl;
return 0;
} //该代码输入之后,需要输ctrl+z,才能出结果
//还有一点就是方法二·在信息学奥赛一本通上有限制,不能正确运行,但是在自己的编译器上可以,有心的可以了解一下