题目来自<系统程序员成长计划>

作者:李先静.

状态变化如下

#include <string>
#include <iostream>
using namespace std;string s = "[GRP]\n\
name = def \n\
data = 2016.11.29 \r\n\
; this is a comment \r\n\
str = this is a test \n\
[zhangshan] \n\
;\n\
name = pengjun \n\
data = 3355456";enum STATE
{STAT_NONE = 0,STAT_GROUP,STAT_KEY,STAT_VALUE,STAT_COMMENT
};void IniBufferParse(const string& s)
{STATE state = STAT_NONE;size_t groupStart = 0, groupEnd = 0;size_t commentStart = 0, commentEnd = 0;size_t keyStart = 0, keyEnd = 0;for (size_t i = 0; i < s.size(); i++){switch (state){case STAT_NONE:if (s[i] == '['){ state = STAT_GROUP;groupStart = i+1;}else if (s[i] == '\r' || s[i] == '\n'){state = STAT_NONE;}else if (s[i] == ';'){state = STAT_COMMENT;commentStart = i + 1;}else if (!isspace( s[i]) ){state = STAT_KEY;keyStart = i;}break;case STAT_GROUP:if (s[i] == ']'){ state = STAT_NONE;groupEnd = i;cout << "group = " <<  s.substr(groupStart, groupEnd - groupStart) << endl;}else if (s[i] == '\r' || s[i] == '\n'){state = STAT_NONE;}break;case STAT_COMMENT:if (s[i] == '\r' || s[i] == '\n'){state = STAT_NONE;commentEnd = i;cout << "comment = " << s.substr(commentStart, commentEnd - commentStart) << endl;break;}break;case STAT_KEY:if (s[i] == '\r' || s[i] == '\n'){state = STAT_NONE;keyEnd = i;string kvString = s.substr(keyStart, keyEnd - keyStart);size_t i = kvString.find_first_of('=');if (i == string::npos)break;cout << "key = " << kvString.substr(0,i-1) << ". value = " << kvString.substr(i+1) <<  endl;break;}break;default:break;}}}int main()
{IniBufferParse(s);return 0;
}

  运行结果

group = GRP
key = name. value = def
key = data. value = 2016.11.29
comment = this is a comment
key = str. value = this is a test
group = zhangshan
comment =
key = name. value = pengjun
请按任意键继续. . .

转载于:https://www.cnblogs.com/itdef/p/6112765.html

状态机学习(二)解析INI文件相关推荐

  1. AVI音视频封装格式学习(二)——AVI RIFF文件参考

    AVI RIFF文件参考 AVI RIFF File Reference 微软AVI文件格式是与捕获,编辑和播放音视频流的应用程序一起使用的RIFF文件规范.通常,AVI文件包含多个不同类型的数据流. ...

  2. 解决ini-parser解析ini文件中文乱码问题

    解决ini-parser解析ini文件中文乱码问题 参考文章: (1)解决ini-parser解析ini文件中文乱码问题 (2)https://www.cnblogs.com/nodegis/p/95 ...

  3. python解析ini文件

    新建一个config.ini文件 [LocalDB] ip=127.0.0.1 prot=3306 user=root passwd=123456 db=proxy python中解析ini文件的库为 ...

  4. C#学习笔记——读写ini文件

    1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Text; 5: ...

  5. vb 解析ini文件_PHP文件及运行(适合PHP初学者)

    PHP文件及运行(适合PHP初学者) PHP文件可包含HTML.JavaScript代码和 PHP代码,换句话说PHP 代码可以嵌入HTML文档.PHP文件名以php为后缀. PHP代码以" ...

  6. vc中常用文件操作(二) Ini文件操作

    在我们写的程序当中,总有一些配置信息需要保存下来,以便完成程序的功能,最简单的办法就是将这些信息写入INI文件中,程序初始化时再读入.具体应用如下: 一.将信息写入.INI文件中. 1.所用的WINA ...

  7. Python 内置模块之 ConfigParser - 解析 ini 文件

    ini配置文件是被configParser直接解析然后再加载的,如果只是修改配置文件,并不会改变已经加载的配置 INI文件结构简单描述 INI文件就是扩展名为"ini"的文件.在W ...

  8. Java当中解析ini文件对应到JavaBean当中

    目录 1.ini文件简介 2.ini文件 3.ini解析工具类 4.示例运行结果 1.ini文件简介 .ini 文件是Initialization File的缩写,即初始化文件,是windows的系统 ...

  9. PDF学习二:PDF文件物理结构

    说明: 在PDF学习一 Hello World中简单提到了PDF文件结构.本文将重点讲PDF文件结构,指的是其文件物理组织方式,决定对象是如何存放在一个PDF文件中, 它们是如何被访问的,如何被更新的 ...

最新文章

  1. Android 自定义ProgressBar 实现进度圆环
  2. 2021-11-10 YOLOX训练最新笔记总结(coco格式)
  3. 自定义控件:QQ气泡效果粘性控件的实现
  4. Rancher的简单部署和使用
  5. 【RPC】你应该知道的 RPC 原理
  6. Github Actions
  7. go语言的iota是什么意思_go语言基础之iota枚举
  8. 在线圆周率查询下载工具
  9. XcodeGhost:墙、感染、信任和欺骗
  10. 快速学习单反相机基础操作
  11. css模板 bulma_用Bulma在6分钟内学习CSS框架
  12. 用matlab道路交通信息化,tiaffic 基于matlab十字路口交通流模拟仿真,多种集合 263万源代码下载- www.pudn.com...
  13. 微信小程序考勤签到管理系统+后台管理系统
  14. ibmt60升级linux,【原创】老兵不死,T60最强升级记
  15. 手把手教你,搭建内网穿透服务
  16. r720换固态硬盘后如何重装系统_电脑安装完固态硬盘后如何重装系统?
  17. 一种使用内存做硬盘的方法,提升读写速度
  18. 来答疑了!关于网易云信 Innovation 2022 开发者大赛,你想知道的都在这儿!
  19. Microsoft Excel 教程:如何在 Excel 中使用 XLOOKUP 函数?
  20. NFT如何应用到医疗健康产业

热门文章

  1. 联想w540笔记本参数_2020年12月笔记本电脑推荐!联想、惠普、华为笔记本电脑推荐!18款高性价比笔记本电脑推荐!!!...
  2. python爬虫cookie池 与ip绑定_Python爬虫:设置Cookie解决网站拦截并爬取蚂蚁短租
  3. 串传送指令MOVSB MOVSW
  4. floatvalue 重写_Java Number floatValue()方法与示例
  5. Java PriorityQueue clear()方法与示例
  6. java集合转换_java各种集合的转换
  7. C++ 常用拷贝和替换算法
  8. C++ 对引用的理解5
  9. 【c语言】棋盘游戏--三子棋
  10. 2018南京区域赛 J-Prime Game