UVaOJ 123 - Searching Quickly

来源:互联网 发布:网络社会零售额 编辑:程序博客网 时间:2024/05/21 21:43

AOAPC I: Beginning Algorithm Contests (Rujia Liu) :: Volume 1. Elementary Problem Solving ::Sorting/Searching


Description

在一些文章标题中, 寻找关键词。

所谓关键词, 就是在一个过滤词表中, 没有被过滤掉的单词。

请将关键词找出来后, 按字典序排序。

且输出关键词时, 是将关键词在标题中以全大写的形式出现(其他单词全变为小写),

然后输出整个句子。


Type

Sorting/Searching


Analysis

利用 STL map 做起来就容易了,

将关键词作键, 对应的句子作值, 储存于 multimap 中。

(由于可能出现相同的关键词, 所以应该用 multimap)

连字典序排序都剩了。


最后要注意, 标题和过滤词表在输入时可以全转为小写,

会比较方便字符串操作。


Solution

// UVaOJ 123// Searching Quickly// by A Code Rabbit#include <cctype>#include <iostream>#include <set>#include <string>#include <map>using namespace std;string word;string title;string ToLower(string str);string ToUpper(string str);int main() {    set<string> words;    while (getline(cin, word)) {        if (word == "::") break;        else words.insert(ToLower(word));    }    multimap<string, string> kwic;    while (getline(cin, title)) {        title = ToLower(title);        string key;        string val = title;        for (int i = 0; i <= title.length(); i++) {            if ((i == title.length() || title[i] == ' ') && key != "") {                if (!words.count(key)) {                    key = ToUpper(key);                    for (int j = 0; j < key.length(); j++)                        val[i - key.length() + j] = key[j];                    kwic.insert(make_pair(key, val));                    val = title;                }                key = "";            } else {                key += title[i];            }        }    }    for (map<string, string>::iterator iter = kwic.begin();        iter != kwic.end();        ++iter)    {        cout << iter->second << endl;    }        return 0;}string ToLower(string str) {    for (int i = 0; i < str.length(); i++)        str[i] = tolower(str[i]);    return str;}string ToUpper(string str) {    for (int i = 0; i < str.length(); i++)        str[i] = toupper(str[i]);    return str;}