摘要

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

题意

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

题解

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

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

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

显示/移除行号
  1. transform(被转换字符串.begin(),被转换字符串.end(),存储位置.begin(),towlowertowupper);
  2. //例如:
  3. transform(str.begin(),str.end(),str.begin(),towlower);

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

代码

1522.cpp代码已折叠
展开折叠内容
显示/移除行号
  1. #include<sstream>
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<string>
  5. #include<map>
  6. #include<algorithm>
  7. #include<cctype>
  8. using namespace std;
  9. int main()
  10. {
  11. int n;
  12. scanf("%d\n",&n);
  13. while(n--)
  14. {
  15. map<string,int> u;
  16. string s,maxps;
  17. getline(cin,s,'\n');
  18. string ls=s;
  19. transform(ls.begin(),ls.end(),ls.begin(),towlower);
  20. stringstream sio;
  21. sio<<ls;
  22. string p;
  23. int last=0,maxp=0;
  24. while(sio>>p)
  25. {
  26. if(p[p.size()-1]=='.')
  27. p.erase(p.size()-1,1);
  28. ++u[p];
  29. if(u[p]>maxp)
  30. {
  31. maxp=u[p];
  32. maxps=p;
  33. }
  34. }
  35. while(ls.find(maxps,last)!=string::npos)
  36. {
  37. last=ls.find(maxps,last);
  38. ls.replace(last,maxps.size(),"guagua");
  39. s.replace(last,maxps.size(),"guagua");
  40. ++last;
  41. }
  42. cout<<s<<endl;
  43. }
  44. return 0;
  45. }

著作权声明[编辑]

关于[编辑]