c++学习笔记——个单词转换的map程序详解

实现功能:给定一个string,将它转换为另一个string。程序输入是两个文件,第一个文件保存转换规则,第二个文件为将要进行转换的文本。

IDE:Windows7+VS2013

[cpp] view plaincopy

  1. #include "stdafx.h"
  2. #include <map>
  3. #include <iostream>
  4. #include <fstream>
  5. #include <string>
  6. #include <stdexcept>
  7. #include <sstream>
  8. using namespace std;
  9. map<string, string> buildMap(ifstream &map_file)     //读入给定rules.text文件,建立转换映射
  10. {
  11. map<string, string> trans_map;   //保存转换规则
  12. string key;                      //要转换的单词
  13. string value;                   //替换后的内容
  14. //读取第一个单词存入key中,行中剩余内容存入value
  15. while (map_file >> key && getline(map_file, value))
  16. if (value.size() > 1)        //检查是否有转换规则
  17. trans_map[key] = value.substr(1);
  18. else
  19. throw runtime_error("no rule for " + key);
  20. return trans_map;
  21. }
  22. const string &transform(const string &s, const map<string, string> &m)
  23. {
  24. auto map_it = m.find(s);
  25. if (map_it != m.cend())        //如果单词在转换规则m中
  26. return map_it->second;     //使用替换短语
  27. else
  28. return s;                  //否则返回原string
  29. }
  30. void word_transform(ifstream &map_file, ifstream &input)
  31. {
  32. auto trans_map = buildMap(map_file);   //保存转换规则
  33. cout << "转换规则为: \n";
  34. for (auto entry : trans_map)
  35. cout << "key: " << entry.first<< "\tvalue: " << entry.second << endl;
  36. cout << "\n\n";
  37. string text;                     //保存输入中的每一行
  38. cout << "转换后为: \n";
  39. while (getline(input, text))
  40. {
  41. istringstream stream(text); //读取每一个单词
  42. string word;
  43. bool firstword = true;     //控制是否打印空格
  44. while (stream >> word)
  45. {
  46. if (firstword)
  47. firstword = false;
  48. else
  49. cout << " ";
  50. cout << transform(word, trans_map);
  51. }
  52. cout << endl;
  53. }
  54. }
  55. int _tmain(int argc, _TCHAR* argv[])
  56. {
  57. if (argc != 3)
  58. throw runtime_error("wrong number of arguments");
  59. ifstream map_file(argv[1]);    //第一个参数为rules.text文件
  60. if (!map_file)
  61. throw runtime_error("no transformation file");
  62. ifstream input(argv[2]);      //第二个参数为text.text文件
  63. if (!input)
  64. throw runtime_error("no input file");
  65. word_transform(map_file, input);
  66. return 0;
  67. }

将rules.text和text.text文件放在E盘根目录下

设置运行时参数,在项目属性里面,配置属性->调试->命令参数里面写上你的参数

调试运行,结果如图示

时间: 2024-10-04 10:05:28

c++学习笔记——个单词转换的map程序详解的相关文章

Ext.Net学习笔记22:Ext.Net Tree 用法详解

Ext.Net学习笔记22:Ext.Net Tree 用法详解 上面的图片是一个简单的树,使用Ext.Net来创建这样的树结构非常简单,代码如下: <ext:TreePanel runat="server"> <Root> <ext:Node Text="根节点" Expanded="true"> <Children> <ext:Node Text="节点1" Expand

Ext.Net学习笔记07:Ext.Net DirectMethods用法详解

前面两篇内容中,我们看到了DirectEvents方便调用服务器端方法.DirectEvents调用WebService方法的使用方法,今天我们来看看DirectMethods,这家伙可比DirectEvents更加灵活了,它可以像调用JS方法一样来异步调用服务器端的方法. 使用DirectMethods在JS中调用C#方法 我承认,这个标题有点噱头,其实应该是通过DirectMethods,在JS中通过异步调用的方式执行服务器端的方法. 来看一个例子吧: [DirectMethod] publ

Struts2学习笔记(九):Strut2通用标签详解

本节主要介绍Strus2中的通用标签,主要有<s:url>, <s:set>, <s:push>, <s:if>, <s:elseif>, <s:else>, <s:iterator>, <s:sort>, <s:date>, <s:a>等几个标签的具体用法,仍然采用代码加注释的形式进行说明,希望能对大家有帮助. 刚入门的朋友阅读本文前,请阅读: Struts2学习笔记(六):值栈(va

Spring MVC 学习笔记(二):@RequestMapping用法详解

一.@RequestMapping 简介 在Spring MVC 中使用 @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,相当于Servlet中在web.xml中配置 <servlet>     <servlet-name>servletName</servlet-name>     <servlet-class>ServletClass</servlet-class> </servlet>

《Hibernate学习笔记十》:多对多关联关系详解

<Hibernate学习笔记十>:多对多关联关系 前面介绍了一对一.多对一和一对多的关联关系在Hibernate应如何实现,这篇博文就来介绍下最后一种关联关系:多对多.多对多关联关系在我们现实生活中的例子实在是太多太多,最典型的就是老师和学生的例子:一个老师可以教多个学生,而一个学生又可以被多个老师来教. 了解一点数据库的我们都知道,在数据库中表示多对多的关联关系,是借助于中间表来解决的. 如下: 还是和以往的思路一样,每一种关联关系都分为单向关联和双向关联,我们每种都会进行介绍,对于单向和双

学习笔记-《Linux基础知识之挂载详解(mount,umount及开机自动挂载)》

<Linux基础知识之挂载详解(mount,umount及开机自动挂载)>来源:Linux社区  作者:chawan 原文链接 http://www.linuxidc.com/Linux/2016-08/134666.htm 以下是学习作者这篇文章做的一些摘要及学习体会. 重要概念(经典原文引述) 挂载概念简述: 根文件系统之外的其他文件要想能够被访问,都必须通过"关联"至根文件系统上的某个目录来实现,此关联操作即为"挂载",此目录即为"挂载点

TCP/IP学习笔记(3)-----------TCP/IP协议详解

1.TCP/IP协议栈 四层模型 TCP/IP这个协议遵守一个四层的模型概念:应用层.传输层.互联层和网络接口层. 网络接口层 模型的基层是网络接口层.负责数据帧的发送和接收,帧是独立的网络信息传输单元.网络接口层将帧放在网上,或从网上把帧取下来. 互联层 互联协议将数据包封装成internet数据报,并运行必要的路由算法. 这里有四个互联协议: 网际协议IP:负责在主机和网络之间寻址和路由数据包. 地址解析协议ARP:获得同一物理网络中的硬件主机地址. 网际控制消息协议ICMP:发送消息,并报

【C#学习笔记】【1】VisualStudio2010Express安装详解

工欲善其事必先利其器 俗话说,工欲善其事必先利其器,在正式学习编程前,先把我们的开发软件安装好(当然,你要是大神,用命令行编译执行也不是不可).关于VisualStudio2010我就不复制百度的内容了,想详细看的,可以[点击这里]查看.用我的话说,就是一个写代码的软件,可以让我们通过简单的步骤写好代码并运行.至于Express指的是学习版,可以免费注册使用的(你得有一个微软的账户,也就是邮箱). VisualStudio2010Express安装 首先看我们下载好的软件包,是一个ISO格式的光

.Net学习笔记----2015-07-14(CSS当中的样式属性详解)

CSS当中属性非常多,大体上可以分为以下几类:字体.背景.文本.位置.布局.边缘.列表 1).字体 字体的属性主要包括文字的字体.大小.颜色.显示效果等基本样式.下面是各种字体属性的详细介绍 Font-family:该属性用于设置字体系列 Font-size:该属性定义文字的大小,可以使用度量单位来设置字体的大小,也可以使用一个相对的字体大小.还可以使用绝对的大小标记符. 绝对大小的设置为xx-small.x-small. small.medium.large.x-large.xx-large中