Parser顾名思义其实就是一个解析器。

在这里,博主主要关注的是文本解析。博主的Parser是用C++写的,源代码不方便开放,这里主要总结一下,在这个过程中我认为比较重要的知识点。

首先是map的概念,map是key和value的映射,key对应value,这么说可能不太好理解,我一开始也理解不了,不过要有信心一点一点来。

举个例子:

map<string, string> name;
name["xing"] = "zhang";
string bb = name["xing"];

上面是一个map,提示一下,每当使用到map的时候,要#include <map>。这个map的key是一个string,value也是一个string,name是map类型。

第二句的意思便是,将key为xing所对应的value设置为zhang。这里的bb的值就是zhang,但是我用的是name["xing"]。

另外一个知识点,是流的概念。这里用到的是istringstream,就是string的输入流。

举个例子:

int fun(string &aa)
{istringstream is(aa);int t;if (!(is >> t)){throw "bad cast from string";return 0;}return t;
}

aa为string类型的参数传进函数fun(),is是istringstream,就是将aa输出到int类型的t中,如果输出不成,就抛出异常。说明一点,如果map中的key,find不到的话,会返回“”,注意不是返回null。而是返回“”。string类型的对象存在的话就不会是null,

如果在后续的判断中,判断返回的string类型是否为null的话,据我试验所知,windows下可能不会报错,但是Linux下会报错。

另外一个,就是pair的使用。

pair其实是两个值,这里就不做过多描述,只想强调一点,pair类型如果和map中的insert连用的话,pair类型的第二个值为bool类型,也就是说原本map中的insert是返回void的,但是如果和pair类型连用,会返回bool,如果插入成功会返回true。

另外是,在解析过程中,需要去除不可见字符,俗称BOM头

(static_cast<unsigned char>(line_[0]) == 0xEF &&static_cast<unsigned char>(line_[1]) == 0xBB &&static_cast<unsigned char>(line_[2]) == 0xBF)

在文件结尾也有std::string::npos,不可见,表示文件结束。

我目前能想到的就这么多,后续再有需要补充的,我会再继续补充。

关于Parser的知识点总结相关推荐

  1. 【Android开发】计算机网络基础知识点,如何完成网络请求过程?

    (一)计算机网络基础知识:从一次完整的网络请求过程分析 (1)域名解析 1.1)域名与ip地址 (1)ip地址:ip地址是一个32位(4字节)的二进制数(IPV4),常见格式为:192.168.1.1 ...

  2. Python爬取童程童美TTS网站知识点图片

    Python爬取童程童美知识点PPT图片 爬取的网站:http://kidtts.tmooc.cn/studentCenter/toMyttsPage?isCenter=no http://resou ...

  3. Flask全套知识点从入门到精通,学完可直接做项目

    目录 Flask入门 运行方式 URL与函数的映射(动态路由) PostMan的使用 查询参数的获取 上传文件 其它参数 url_for 函数 响应-重定向 响应-响应内容 响应-自定义响应 Flas ...

  4. 机器学习数据挖掘-软件、网站、课程资源知识点汇总

    以下文章转载自:http://blog.csdn.NET/zouxy09/article/details/8102252 ,感谢原作者!!! 机器学习知识点学习 zouxy09@qq.com http ...

  5. Android工程师面试准备知识点

    Android工程师面试准备知识点 听+7哥说,把下面的全弄懂,面试必过,所以我就试着去把所有题目补充了一下,各位能耐的网友们,如果有吐槽或者补充的尽管给我留言,在这里谢过大家了. 1.   andr ...

  6. 《Hadoop权威指南》知识点整理2

    <Hadoop权威指南>知识点整理2 MapReduce部分 MapReduce应用开发_配置 一个Configuration类的实例代表配置属性极其取值的一个集合,属性由String类型 ...

  7. 44个Java编码规范与常用知识点

    目录 1.编码规范 1.1.static和final 1.2.不用map传参 1.3.用jackson代替fastjson 1.4.数组转list最高效的方式 1.5.list转数组 1.6.数组复制 ...

  8. 最新前端面试知识点总结-2023(3w+字,长篇幅)

    2023-前端面试知识点总结 面试题总览 javascript相关 一.js 代码的常用优化手段 二.es5 构造函数与继承 三.new 一个对象的过程 四.防抖与节流 五.promise/A+规范概 ...

  9. 【学习总结】设计模式知识点整理

    文章目录 前言 一.什么是设计模式? 二.为什么要学习设计模式 三.设计原则 1.开闭原则 2.里氏替换原则 3.依赖倒置原则 4.单一职责原则 5.接口隔离原则 6.迪米特法则 7.合成复用原则 四 ...

最新文章

  1. 如果提高声音测距的分辨率?
  2. php 获取所有下周1,用php获取本周,下周,本月,下月,本季度日期(摘)
  3. (重要)java都是值传递,与对象形参所指向的对象改变,其实参所指向的对象也相应改变并不矛盾(2011年9.30日一天写的两个程序的总结结果)...
  4. mtu设置失败_Oracle RAC该调整网卡MTU值
  5. 大二下学期学习进度(四)
  6. java matcher group_JAVA正则表达式matcher.find()和 matcher.matches()的区别
  7. python函数isdisjoint方法_Python学习之---Python中的内置函数(方法)(更新中。。。)...
  8. 程序员分析了 50 万条拼多多商品数据,告诉你到底是消费升级还是降级!
  9. jquery radio/checkbox change 事件不能触发的问题
  10. linux 停止仿真命令,如何通过命令行关闭Android模拟器
  11. 实现平衡二叉排序树的各种算法(包括二叉树的递归遍历、非递归遍历)
  12. C#中通过Lambda表达式为委托传入更多的参数
  13. keras pytorch_使用PyTorch重新创建Keras功能API
  14. kettle下载安装使用教程
  15. 吉林大学邮箱smtp服务器,吉林大学邮件系统成功案例-彩讯Richmail邮件系统,致力于互联网行业软件的开发和应用12年....
  16. Flink Transformation
  17. 1.background、color、渐变
  18. 【2020年高被引学者】 田奇 华为
  19. 我的世界服务器物品不丢弃,《我的世界》怎样处理没用的物品,这六个销毁物品方法了解一下!...
  20. 后端程序员如何写出优雅的前端试图【Thymeleaf】

热门文章

  1. Windows 右键菜单卡顿很慢问题处理
  2. 我自己对英语学习的心得与体会
  3. Spring Cloud (Eureka,Feign,Hystrix整合)
  4. Kinect坐标转换
  5. 还自己写代码?VBA录制宏了解下
  6. 人力资源外包是什么?转型灵活用工系统,解决服务痛点
  7. 第077封“情书”:弯弯绕<Entagma>Houdini 2018
  8. 新手预算2000元左右买什么吉他好?高性价比单板民谣吉他推荐
  9. 【SQLite3+Qt开发】SQLite3简要介绍+在Qt5中的使用步骤
  10. C#:在一个窗体类中改变另一个窗体控件的属性