在介绍这道题之前,先介绍一下紫书里面和这道题很像的一道题:
紫书P112页 的例题5-3 安迪的第一个字典(Andy’s First Dictionary UVa 10815)

原题链接如下:
Andy’s First Dictionary UVa 10815
AC代码如下(解析直接看紫书里的):

#include<iostream>
#include<string>
#include<sstream>
#include<set>
using namespace std;
set<string> dict;
int main(){string s,buf;while(cin>>s){for(int i=0;i<s.size();i++){if(isalpha(s[i]))s[i]=tolower(s[i]);elses[i]=' ';}stringstream ss(s);while(ss>>buf)//  cout<<buf<<endl;dict.insert(buf);}for(set<string>::iterator it=dict.begin();it!=dict.end();it++){cout<<*it<<endl;}return 0;
} 

弄明白上面这题后,对我们今天要AC的这道题就有帮助了。
一开始博主并不觉得有帮助,所以自己一直用暴力的方法去做,发现对于删除字符串中第一个非字母字符时,会把整个字符串删除了。一直得不到满意的解决方法。所以决定网上找题解。可惜只有一篇。用字典树做的。看起来十分复杂。决定自己搞出来。于是就决定用上面这份代码来看看有木有上面帮助。发现还真有。就是神奇的stringstream了。有了这个东西就可以在上面这份代码加上一些这道升级题的特判就可以AC了!

AC代码如下(建议前面看不懂,可以先看后面代码。代码内容相对承上启下,需要通篇看完):

#include<iostream>
#include<string>
#include<sstream>
#include<set>
using namespace std;
set<string> dict;
int main(){string s,temp,buf;int flag=0;while(cin>>s){for(int i=0;i<s.size();i++){if(isalpha(s[i])){s[i]=tolower(s[i]);if(flag){//判断上一个字符串尾部是否带有‘-’if(s[s.size()-1]!='-'){//如果当前字符串尾部不带‘-’,说明此单词到这结束了temp+=s;//和之前的合并flag=0;//变为0break;}else{//否则继续删除尾部“-”,和之前合并。但是该单词还没有结束s.erase(s.size()-1);temp+=s;flag=1;break;}}}   else if(s[i]=='-'){if(i==s.size()-1){//如果是尾部‘-’,说明单词还没有结束,需 和下一行第一个字符串合并s.erase(s.size()-1);//删除“-”temp=s;flag=1;//标记该单词还不完整break;}else{temp=s;否则直接赋值给tempbreak;}}else{s[i]=' ';//其他字符情况和上一题代码同样处理}if(!flag)//这里可以判断单词是否完整,完整就赋值给temptemp=s;}//这里就是和上面代码一样处理了,具体看紫书解释stringstream的用法if(!flag){stringstream ss(temp);while(ss>>buf)dict.insert(buf);}}//输出for(set<string>::iterator it=dict.begin();it!=dict.end();it++){cout<<*it<<endl;}return 0;
} 

UVa 11062 Andy's Second Dictionary(刘汝佳紫书升级题)相关推荐

  1. 刘汝佳紫书 uva1592

    刘汝佳上传的代码没耐心看...就大致照着书上写的思路写了一个...一开始发现全写错了耗了半天... 定义一个pair,这个pair里有存两个队,字符串对和int对.每每读入一行的时候看看map中是否存 ...

  2. (精讲)UVA - 1339 Ancient Cipher 刘汝佳紫书题单(算法竞赛入门经典)

    仔细读题并且对比样例可以发现,字母的替换和换元的规律是不同的,所以不能用模拟法将原来的字符串找到进行比对,所以要从替换换元前后的特点来看. 替换: 替换前后的两个字母集合可以看作是一个映射: 例如 H ...

  3. UVA - 489 Hangman Judge 刘汝佳紫书题单(算法竞赛入门经典)

    思路很简单,题目中说猜对目标字母中的一个字母,就会将所有该字母的位置显现,因此,可以对目标字符进行筛选去重,然后对输入猜测的每个字母进行比对,由于不能猜已经猜过的字母,因此,要对成功猜出的目标字母进行 ...

  4. UVA - 1225 Digit Counting(刘汝佳紫书题单(算法竞赛入门经典 第二版 2014)

    个人感觉这道题有表述问题 他的题目表述说明测试数据中的数是不超过20的,但其实他的测试点中是有百位数的,所以按两位数去处理数据显然会造成数组越界. 代码如下 #include <bits/std ...

  5. AC自动机模板(摘自刘汝佳紫书,无指针)

    本题的题目选择的是 病毒侵袭持续中 HDU - 3065 const int size=5e4+5; const int SIGMA_SIZE=26; int trie[size][26],val[s ...

  6. 整理 刘汝佳紫书第三章习题代码 未完待续

    还有一会儿要去剑道社训练...就整理整理好了... 习题3-1 得分 UVA1585 代码: #include <iostream> using namespace std; int ma ...

  7. c语言 开灯问题,刘汝佳紫书[数组和字符串]内容总结

    本篇文章是笔者对紫书第3章--数组和字符串内容的一个整理,主要是基于问题的整理,总结并理顺了一下思路. 不得不说,这些题解真的是太巧妙了

  8. 对刘汝佳蓝书点双连通分量(BCC)模板的理解

    /*经过简单的使用,对刘汝佳的这个板做几个简单的说明:1.算法结束后每个bcc[i]里存入一个双连通分量的点的标号,其中割点也被存进去,也就是说割点可以属于多个双连通分量2.根据刘汝佳所说的点-双连通 ...

  9. 刘汝佳蓝书后缀数组模板解释及补全

    相信很多初学后缀数组的ACMer在学习蓝书中的后缀数组部分遇到了一些障碍,可能像我一样看明白了P219 --220的讲解和算法,百度了基数排序的方法,然后被卡在P221的代码上了,本文目的即分享我对这 ...

最新文章

  1. 杭电1000 A + B Problem
  2. 【学习笔记】4、Jupyter Notebook闪退问题
  3. python如何将视频流实时传输到手机?(有问题,一次只能被一台访问)
  4. wxWidgets:wxListCtrl类用法
  5. mysqlreport查看mysql性能
  6. MySQL倒序如何避免filesort_如何避免mysql查询的filesort?
  7. java saxreader_JAVA解析XML,SAXReader无法使用
  8. Composite UI Application Block学习笔记之Event Broker
  9. openstack 功能_为什么我们在OpenStack中冻结功能
  10. http和restful知识点查阅
  11. java 求集合真子集_【同步练习】高一高中数学必修1集合的关系与元素性质
  12. postman提交文件及get、post请求
  13. AppStore苹果应用支付开发(In App Purchase)翻译
  14. matlab java mac_macOS Mojave上Matlab 2018a与Java的联合编程
  15. Response.Redirect在新窗口打开
  16. mysql sjis 校对乱码_数据库乱码问题解决剖析
  17. php 货币换算,PHP货币换算程序代码
  18. 1116: 删除元素 C语言
  19. ios下input框 数字键盘问题
  20. axure文件如何加密_axure怎么锁定位置

热门文章

  1. 8102秋季校招:我的校招经历+Android岗总结(面经+技巧)
  2. 用计算机演奏香蜜的歌曲,杨紫新剧《蜜汁炖鱿鱼》上演计算机天才,搭档李现CP感爆棚...
  3. 《设计模式的艺术》读书笔记
  4. 怎么判断机械表上满弦_腕表冷知识,知道两个以上算我输!
  5. 射频毫米波芯片设计11:基于奇偶模法分析设计射频微波Wilkinson功分器
  6. mysql联合唯一索引可以有多个吗_mysql可以设置联合唯一索引吗?
  7. 自启动U盘,他乡有知音
  8. 【Android】SD卡的安全存储问题
  9. OpenGL编程轻松入门之使用颜色
  10. c语言 星座运势,第十一周 OJ总结-日期妙算星座