set容器的初级题目——set对字符串进行排序
题目链接
在看我下面分享的题解之前,建议大家先自己整理一下自己关于这道题的思路
(由于题目太长,不粘贴题目了)
题目大意:(从数据的输入和输出的方向考虑)
输入:输入一篇文章,文章有一下特点:
1,由单词,空格,和各种符号组成,其中有大些字母,也有小写字母
2,文章不超过2000行,没一行不超过200个单词,文章最后以EOF结束
输出:输出在这篇文章中出现的单词,要求每行一个,单词有一下特点
1,按照字典序排序,且不可重复;
2,输出的单词中只有小写字母,即若文章中出现Apple 和 apple 视为一个单词
注:先分享代码,在代码中有解释,代码后有涉及到的其它知识点的简单理解
#include<iostream>
#include<set>
#include<cstdio>
#include<string>
#include<sstream>
using namespace std;
int main()
{
set<string>s;//生成一个set容器,用来存储单词
string str,temp;
int i;
while(cin>>str)//按行输入数据,这里认为,对于一个单词来说,不会有一个单词在两行的情况
{
for(i=0;i<str.length();i++)//str.length(),判段长度的函数
{
if(isalpha(str[i])) str[i]=tolower(str[i]);//将大写字母转化为小写字母
else str[i]=' ';//将非字母的字符转化为空格,为下面做准备;
}
istringstream STR(str);//将一串字符中可以形成单词的组合筛选出来
while(STR >> temp)
s.insert(temp);//将单词插入,set容器中去;
}
set<string>::iterator ite;//遍历,将所有单词输出
for(ite=s.begin();ite!=s.end();ite++)
{
cout<<*ite<<"\n";//注意换行
}
return 0;
}
在题目中用到的函数:
1,
string s;
s.length( );
所含字符的数目
2,
char c;
isalpha(c)
判断字符c是否是字母,如果是字母,返回1,否则放回0
3,char A,a;
scanf("%c",&A);
a=tolower(A);
将大写字母转化为小写字母,并返回小写字母;
4,
char A,a;
scanf("%c",&a);
A=toupper(a);
将小写字母转化为大写字母,并返回小写字母;
代码中出现的一个重要的知识点:“将小写字母转化为大些字母,并反回大写字母;”
这里不做阐述,
题目总结:
一,使用到的知识点:
1,set容器对单词排序的能力;
2,istringstrem从文章中筛选出单词的能力
3,对字符处理的一些特殊函数,isalpha(),tolower(),toupper();
二,解题的思路:将一段文章中的单词中出现的大些字母转化为小写字母,
从一段文章中将单词筛选出来,将单词插入set容器中进行排序,输出set容器内的东西。