摘要

题目链接 难度等级 完成状态 完成分数 最后编辑时间 失误原因(初次提交分数)
Wallace and His Pet ★☆☆☆☆ 答案正确 100 2014-10-30 19:44:28 没考虑大写情况(0)

题意

把每个句子中出现次数最多的单词替换成guagua。

题解

map+string搞定(string库用法见CodeVS/1204,STL用法详见CodeVS/1075参考链接)。

第一次没考虑大小写的问题,做法是先整句处理成小写,然后搜索匹配小写后的句子,替换原句相应处的字符,这样大小写不会乱。

大小写转换用的是algorithm和cctype库里的一个函数,用法是:

transform(被转换字符串.begin(),被转换字符串.end(),存储位置.begin(),towlower或towupper);
//例如:
transform(str.begin(),str.end(),str.begin(),towlower);

至于读取一行后再分割的技巧,在CodeVS/1205谈过了,就不再细说。

代码

1522.cpp代码已折叠
展开折叠内容
#include<sstream>
#include<iostream>
#include<cstdio>
#include<string>
#include<map>
#include<algorithm>
#include<cctype>
using namespace std;
int main()
{
    int n; 
    scanf("%d\n",&n);
    while(n--)
    {
        map<string,int> u;
        string s,maxps;
        getline(cin,s,'\n');
        string ls=s;
        transform(ls.begin(),ls.end(),ls.begin(),towlower);
        stringstream sio;
        sio<<ls;
        string p;
        int last=0,maxp=0;
        while(sio>>p)
        {
            if(p[p.size()-1]=='.')
                p.erase(p.size()-1,1);
            ++u[p];
            if(u[p]>maxp)
            {
                maxp=u[p];
                maxps=p;
            }
        }
        while(ls.find(maxps,last)!=string::npos)
        {
            last=ls.find(maxps,last);
            ls.replace(last,maxps.size(),"guagua");
            s.replace(last,maxps.size(),"guagua");
            ++last;
        }
        cout<<s<<endl;
    }
    return 0;
}

著作权声明[编辑]

关于[编辑]