COJ: Languages(字符串处理、map映射)

来源:互联网 发布:小米平板2怎么关闭优化 编辑:程序博客网 时间:2024/06/03 16:40

题目链接:CSU - 1826

题意:现在告诉你有n种语言,并给出每种语言对应的单词(不同语言间不会有相同的单词),然后给出几行文本,让你判断属于那种语言

思路:运用字符串流,先将每种语言对应的一行读进来,然后用字符串流将每个单词读进来,再用一个map将每个单词映射成每种语言的名称,然后也同样用字符串流输入每个单词,在输进来之前先遍历一遍其中可能出现的标点符号,将除“-”和“‘ ”以外的其他标点符号改成空格,并将字母都换成小写,最后找到出现过的单词,直接映射成相应的语言名称输出

AC代码

#include<iostream>#include<cstdio>#include<map>#include<string>#include<sstream>#include<algorithm>#include<cctype>using namespace std;#define maxn 105map<string,string> m;string line,language,keywords,simplewords;int main(){    int n;    cin>>n;    m.clear();    getchar();            //清除缓冲区里的回车符,cin>>n最后会留下"\n"    for(int i=0; i<n; i++)    {        getline(cin,line);        stringstream ss(line);        ss>>language;        while(ss>>keywords)        {            for(int j=0; j<keywords.size(); j++)            {                if(isalpha(keywords[j])) keywords[j]=tolower(keywords[j]);            }            m[keywords]=language;        }    }    while(getline(cin,line))    {        for(int k=0; k<line.length(); k++)        {            if(isalpha(line[k])||line[k]==39||line[k]==45) continue;            else line[k]=' ';        }        stringstream ss(line);        while(ss>>simplewords)        {            for(int i=0; i<simplewords.size(); i++)            {                if(isalpha(simplewords[i])) simplewords[i]=tolower(simplewords[i]);            }            if(m.count(simplewords)) {cout<<m[simplewords]<<endl;break;}        }    }    return 0;}
原创粉丝点击