3307 单词排序

3307 单词排序
输入一行单词序列,相邻单词之间由1个或多个空格间隔,请按照字典序输出这些单词,要求重复的单词只输出一次。(区分大小写)

输入
一行单词序列,最少1个单词,最多100个单词,每个单词长度不超过50,单词之间用至少1个空格间隔。数据不含除字母、空格外的其他字符。
输出
按字典序输出这些单词,重复的单词只输出一次。
输入样例
She wants to go to Peking University to study Chinese
输出样例
Chinese
Peking
She
University
go
study
to
wants
题目链接:http://class.51nod.com/Challenge/Problem.html#problemId=3307
解题思路
思路1:
1.我们首先要考虑如何分离字符串
2.在输入的时候直接分离单词
3.然后排序并且判断有没有重复的,直接输出
4.PS:不好意思,Dev运行后可能会在循环中跳不出来(没有输出)但是在网站可以AC
思路2:
1.string有一个好处就是字符串可相加
2.遇到空格就直接储存
3.对最后一个字串进行处理
完整代码
思路1:

#include<bits/stdc++.h>
using namespace std;
string A[200];
int main()
{
	int n = 0;
	while(cin >> A[n++]);
	n--;
	sort(A,A+n);
	cout << A[0] << endl;
	for(int i = 1;i < n;i++)
	{
		if(A[i] != A[i - 1])
		cout << A[i] << endl;
	}
	return 0;
}

思路2:

#include<bits/stdc++.h>
using namespace std;
string s[1000];
int main()
{
	string t,m;
	getline(cin,t);
	int n = 0;
	for(int i = 0;i < t.size();i++)
	{
		if(t[i] != ' ')
		m += t[i];//字符串连接
		if(t[i] == ' ')
		{
				s[n++] = m; //即:s[n ] = m;n++;遇到一个空格,意味着有一个字串; s[n++]等于先用s[n]再n++,s[++n]等于先n++;再s[n]
				m.clear();
		}
	}
	s[n++] = m;//最后一个不会有空格,所以m里面的单词加不到s里面,所以要特殊处理
	sort(s,s + n);
	cout << s[0] << endl;
	for(int i = 1;i < n;i++)
	if(s[i] != s[i - 1]) 
	cout << s[i] << endl;
	return 0;
} 
上一篇:玩转linux之桌面设置(Ubuntu20.04)


下一篇:MySQL源码编译安装