UVa 123 Searching Quickly

UVa 123 Searching Quickly
题目很简单:给出一系列要忽略的单词,这些单词以外的单词都看作关键字。然后给出一些标题,找出标题中所有的关键字,然后按这些关键字的字典序给标题排序。注意两点:相同关键字出现在不同标题中,出现在输入较前位置的标题排在前面(从样例数据可以看出,而且multimap也正是这么做的);同一个关键字在一个标题中出现多次,关键字位于较前位置的排在前面(从左向右扫描的话就没有问题)。
STL中<set>、<map>神器!用起来很方便,只是担心我再这么用下去Qsort、Bsearch什么的自己都不会写了~
以下是我的代码:
#include < iostream >
#include
< string >
#include
< map >
#include
< set >
#include
< cstdio >
#include
< cctype >
using   namespace  std;
const   int  kMaxn( 207 );
const   string  kSign( " :: " );

int  main()
{
    
/*
    freopen("data.in","r",stdin);
    freopen("data.out","w",stdout);
    //
*/

    
set < string >  ignore;
    
string  t;
    
while (getline(cin,t)  &&  t != kSign)
        ignore.insert(t);
    multimap
< string , string >  r;
    
while (getline(cin,t))
    {
        
for ( int  i = 0 ;i < t.size();i ++ )
            t[i]
= tolower(t[i]);
        
for ( int  i = 0 ;i < t.size();i ++ )
        {
            
if ( ! isalpha(t[i]))
                
continue ;
            
int  j(i);
            
string  t2;
            
while (j < t.size()  &&  isalpha(t[j]))
            {
                t2
+= t[j];
                j
++ ;
            }
            
if ( ! ignore.count(t2))
            {
                
for ( int  k = 0 ;k < t2.size();k ++ )
                    t2[k]
= toupper(t2[k]);
                
string  t3(t);
                t3.replace(i,t2.size(),t2);
                r.insert(make_pair(t2,t3));
            }
            i
= j;
        }
    }

    
for (map < string , string > ::iterator i = r.begin();i != r.end();i ++ )
        cout
<< i -> second << endl;

    
return   0 ;
}

你可能感兴趣的:(UVa 123 Searching Quickly)