c++学习笔记——个单词转换的map程序详解
实现功能:给定一个string,将它转换为另一个string。程序输入是两个文件,第一个文件保存转换规则,第二个文件为将要进行转换的文本。
IDE:Windows7+VS2013
- #include "stdafx.h"
- #include <map>
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <stdexcept>
- #include <sstream>
- using namespace std;
- map<string, string> buildMap(ifstream &map_file) //读入给定rules.text文件,建立转换映射
- {
- map<string, string> trans_map; //保存转换规则
- string key; //要转换的单词
- string value; //替换后的内容
- //读取第一个单词存入key中,行中剩余内容存入value
- while (map_file >> key && getline(map_file, value))
- if (value.size() > 1) //检查是否有转换规则
- trans_map[key] = value.substr(1);
- else
- throw runtime_error("no rule for " + key);
- return trans_map;
- }
- const string &transform(const string &s, const map<string, string> &m)
- {
- auto map_it = m.find(s);
- if (map_it != m.cend()) //如果单词在转换规则m中
- return map_it->second; //使用替换短语
- else
- return s; //否则返回原string
- }
- void word_transform(ifstream &map_file, ifstream &input)
- {
- auto trans_map = buildMap(map_file); //保存转换规则
- cout << "转换规则为: \n";
- for (auto entry : trans_map)
- cout << "key: " << entry.first<< "\tvalue: " << entry.second << endl;
- cout << "\n\n";
- string text; //保存输入中的每一行
- cout << "转换后为: \n";
- while (getline(input, text))
- {
- istringstream stream(text); //读取每一个单词
- string word;
- bool firstword = true; //控制是否打印空格
- while (stream >> word)
- {
- if (firstword)
- firstword = false;
- else
- cout << " ";
- cout << transform(word, trans_map);
- }
- cout << endl;
- }
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- if (argc != 3)
- throw runtime_error("wrong number of arguments");
- ifstream map_file(argv[1]); //第一个参数为rules.text文件
- if (!map_file)
- throw runtime_error("no transformation file");
- ifstream input(argv[2]); //第二个参数为text.text文件
- if (!input)
- throw runtime_error("no input file");
- word_transform(map_file, input);
- return 0;
- }
将rules.text和text.text文件放在E盘根目录下
设置运行时参数,在项目属性里面,配置属性->调试->命令参数里面写上你的参数
调试运行,结果如图示
c++学习笔记——个单词转换的map程序详解的更多相关文章
- Ext.Net学习笔记22:Ext.Net Tree 用法详解
Ext.Net学习笔记22:Ext.Net Tree 用法详解 上面的图片是一个简单的树,使用Ext.Net来创建这样的树结构非常简单,代码如下: <ext:TreePanel runat=&q ...
- Ext.Net学习笔记23:Ext.Net TabPanel用法详解
Ext.Net学习笔记23:Ext.Net TabPanel用法详解 上面的图片中给出了TabPanel的一个效果图,我们来看一下代码: <ext:TabPanel runat="se ...
- linux初级学习笔记六:linux用户及权限详解!(视频序号:03_4)
本节学习的命令:/etc/passwd,/etc/shadow,/etc/group文件详解 本节学习的技能: 安全上下文 文件与目录的权限管理 影子命令 用户,用户组类别详解 /etc/passwd ...
- linux初级学习笔记四:Linux文件管理类命令详解!(视频序号:03_1)
本节学习的命令:cat(tac),more,less,head,tail,cut,sort,uniq,wc,tr 本节学习的技能:目录管理 文件管理 日期时间 查看文本 分屏显示 文本处理 文件管理命 ...
- 大前端学习笔记整理【六】this关键字详解
前言 在上一篇博客里我总结了下辨认this指向的四种方式,但是有师兄抛出一个问题来,我发现那些this的指向并不能说明更复杂的情况,先看下这段代码 var a = { name: 'a', getNa ...
- Ext.Net学习笔记07:Ext.Net DirectMethods用法详解
使用DirectMethods在JS中调用C#方法 我承认,这个标题有点噱头,其实应该是通过DirectMethods,在JS中通过异步调用的方式执行服务器端的方法. 来看一个例子吧: [Direct ...
- 学习笔记--Git安装 创建版本库 图文详解
一.Git下载 在Windows上安装git,一般为msysgit,官网地址:http://git-scm.com/ 我下载的是Git-1.9.2-preview20140411.exe 二.Git安 ...
- Ext.Net学习笔记05:Ext.Net DirectEvents用法详解
Ext.Net通过DirectEvents进行服务器端异步的事件处理.我们在 Ext.Net用法概览 这篇中已经简单的介绍了DirectEvents,今天我们将详细的介绍一下DirectEvents. ...
- Android学习笔记(二)Manifest文件节点详解
在上一篇博文中简单介绍了Manifest文件及其存放位置,本篇就来详细介绍一下Manifest文件中的节点和一些节点的基本作用,首先看一下Manifest文件最基本的结构: <manifest ...
随机推荐
- 求 pi 的近似值题型汇总
(注:暂时先记录这些问题,后期会持续更新) 一.用格雷戈里公式计算π的近似值,精度要求:最后一项的绝对值小于0.00001 1,用while循环实现 int denominator,flag; dou ...
- ASP.NET MVC使用Oauth2.0实现身份验证
随着软件的不断发展,出现了更多的身份验证使用场景,除了典型的服务器与客户端之间的身份验证外还有,如服务与服务之间的(如微服务架构).服务器与多种客户端的(如PC.移动.Web等),甚至还有需要以服务的 ...
- TI单节电量计基本介绍及常见问题解答
电量计(gas gauge /fuel gauge)是用来计量显示电池电量,通常包括mAh剩余容量(RM),满充容量(FCC),百分比容量(SOC),电压,电流,温度等,部分电量计还包含放空,充满时间 ...
- Linux free命令使用及解析
1. 命令格式 free [参数] 2. 命令功能 free 命令显示系统使用和空闲的内存情况,包括物理内存.交互区内存(swap)和内核缓冲区内存.共享内存将被忽略 3. 命令参数 -b 以Byte ...
- Intellij 2016非服务器激活
下载 http://idea.lanyus.com/jar/JetbrainsCrack-2.6.2.jar 并将 JetbrainsCrack-2.6.0.jar 放置到 D盘根目录(也可以根据自己 ...
- php base64_encode,serialize对于存入数据表中字段的数据处理方案
A better way to save to Database $toDatabse = base64_encode(serialize($data)); // Save to database $ ...
- js pjax 和window.history.pushState,replaceState
原文:http://blog.linjunhalida.com/blog/pjax/ github:https://github.com/defunkt/jquery-pjax 什么是pjax? 现在 ...
- nvm安装node和npm,个人踩坑记录
我采用nvm-setup安装windows版本的nvm nvm安装node出现的问题: 1.node成功了,npm没成功 解决:在nvm 安装了node之后,输入npm找不到该命令,当时安装报错如下: ...
- MVC多语言设置 实战简洁版
此方式可以通过更改进行更改进程语言设定,支持从系统获取默认的区域设定,支持自定义,自定义的方式可以为cookie,可为资料库获取,session等方式. 具体怎么设定就看个人需要了. 第一步: 添加资 ...
- Bootstrap 各种进度条详解
一:默认的进度条 创建一个基本的进度条的步骤如下: 添加一个带有 class .progress 的 <div>. 接着,在上面的 <div> 内,添加一个带有 class . ...