题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1756
题意:输入一篇文章,把每个单词记录一下,大写全转化为小写,相同只记录一个,然后排序输出。
方法:需要注意的就是当字母前出现符号和字母后出现符号需要处理一下。
#include<stdio.h>
#include<string>
#include<string.h>
#include<iostream>
#include<map>
#include<algorithm>
using namespace std;
struct node
{
string a;
} num[5000005];
int cmp(node x,node y)
{
return x.a<y.a;
}
map<string,int>m;
int main()
{
string s;
int lenn=0;
m.clear();
while(cin>>s)
{
int flag=0;
string ss="";
int len=s.size();
for(int i=0; i<len; i++)
{
if(s[i]>='A'&&s[i]<='Z')
s[i]+=32,ss+=s[i],flag=1;
else if(s[i]>='a'&&s[i]<='z')
ss+=s[i],flag=1;
else
{
if(m[ss]==0&&flag==1&&ss!="")
num[lenn++].a=ss,flag=0;
m[ss]++,ss="";
}
}
if(m[ss]==0&&flag==1&&ss!="")
num[lenn++].a=ss;
m[ss]++;
}
sort(num,num+lenn,cmp);
for(int i=0; i<lenn; i++)
cout<<num[i].a<<endl;
return 0;
}