map——单词的转换

原创 2015年07月10日 14:44:27

程序实现目的:根据“转换规则文件(暗码)”对“待转换文件(明文)”进行转换。

使用数据结构:map的创建、搜索、以及遍历。

//map的创建、搜索、以及遍历
//单词转换
#include<iostream>//定义用于读写流的基本类型
#include<map>
#include<string>
#include<fstream>//定义用于读写命名文件的类型
#include<sstream>//定义用于读写内存string对象的类型

using namespace std;

//建立转换映射(map的创建)
map<string, string> buildMap(ifstream &map_files)
{
	map<string, string> trans_map;   //保存转换规则
	string key;   //要转换的单词(缩略词)
	string value;  //替换后的内容(缩略词相对应的完整内容)
	//读取第一个单词存入key,剩余的内容存入value。
	//在执行读取操作时,string对象会自动忽略开头的空白(空格、换行、制表符)并从第一个真正的字符开始读起,直到遇到下一处空白为止
	//getline函数的参数是一个输入流和一个string对象,函数从给定的输入流中读取内容,直到遇到换行符为止,然后把所读的内容存入那个string对象。
	while(map_files >> key && getline(map_files, value))
	{
		if (value.size() > 1)
			trans_map[key] = value.substr(1);//跳过缩略词和说完整内容之间空格————前导空格
		else
			throw runtime_error("no rule for" + key);
	}

	cout << "转换规则文件map:" << endl;
	for (auto s : trans_map)
		cout << s.first << " " << s.second << endl;
	cout << endl;

	return trans_map;
}

//生成转换文本(map的搜索)
const string & word_transform(const string &s, const map<string, string> &m)
{
	auto map_it = m.find(s);//首先确定给定的string是否在map中
	
	if (map_it != m.cend())
		return map_it->second; //使用替换短语
	else
		return s;  //否则返回原string
}

//单词转换程序(map的遍历)
void transform(ifstream &map_files,ifstream &input)
{
	auto trans_map = buildMap(map_files); //保存转化规则
	string text;
	cout << "转换后文本内容:" << endl;

	//转换后文本打印在控制台
	//用getline一行一行的读取输入文件是为了使输出中的换行位置能和输入文件中一样
	//使用istreamstring来处理当前行中的每个单词
	while (getline(input, text))   //读取输入文件的每一行
	{
		istringstream stream(text);    //读取每个单词
		string word;
		bool firstword = true;         //控制是否打印空格
		while (stream >> word)
		{
			if (firstword)
				firstword = false;
			else
				cout << " ";           //在单词间打印一个空格

			cout << word_transform(word, trans_map);//打印输出
		}
		cout << endl;  //完成一行的转换
	}


	////转换后文件输出在输出文件
	//cout << "转换后文件输出在输出文件(..\\out_files.txt)" << endl;
	//ofstream out("..\\out_files.txt");
	//while (getline(input, text))   //读取输入文件的每一行
	//{
	//	istringstream stream(text);    //读取每个单词
	//	string word;
	//	bool firstword = true;         //控制是否打印空格
	//	while (stream >> word)
	//	{
	//	    if (firstword)
	//			firstword = false;
	//		else
	//			out << " ";           //在单词间打印一个空格

	//		out << word_transform(word, trans_map); //输出
	//	}
	//	out << endl;  //输出换行
	//}
	//out.close();
}

void main()
{
	ifstream map_files, input_files;
	map_files.open("..\\map_files.txt");//转换规则文件放在该源程序的上一级目录下
	input_files.open("..\\input_files.txt");//待转换文件放在该源程序的上一级目录下

	//将待转换文件文本内容打印在控制台
	cout << "待转换文件文本内容:" << endl;
	string str;
	while (getline(input_files, str))
	{
		cout << str << endl;
	}
	cout << endl;

	//一旦一个文件流已经打开,它就保持与对应文件的关联。实际上,对于一个已经打开的文件流调用open会失败,随后的试图使用文件流的操作都会失败
	input_files.close();//关闭input_files,以便我们将其用于其他文件
	input_files.open("..\\input_files.txt");

	transform(map_files, input_files);
}


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

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

单词转换程序——使用map&文件读写操作

单词转换程序是C++primer中的题。主要使用map来存储单词转换的规则; 以及文件读写的操作,比如ifstream & ofstream & istringstream 流程: 1、生...

一个单词转换的map

  • 2014年10月13日 15:22
  • 2KB
  • 下载

C++ primer ————————————“单词转换" map 对象

#include #include #include #include #include #include /* 单词转换 :给出一个string 对象 转换成另一个string对...

C++ primer 单词转换(使用map对象)

map关联容器类型通常理解为关联数组,由键(类型)和值(类型)组成。方便记忆以书店图书为例:map bookstore;ISBN为键,对应图书sale_item为值,这使得我们能够通过键的顺序访问元素...

c++学习笔记-map的使用实例(单词转换)

c++中的map是关联容器,以key-value的形式存储数据,类似于java中的Map类型和python中的dict。key不能重复,并能通过下标的形式(map[key])返回value,因此也被称...

使用map关联容器实现单词转换的程序

针对C++Primer(第四版)10.3.9节的单词转换程序实现与分析,参照书本p317-318。 实现源代码如下:#include #include //使用istringstream、ostr...

c++primer关联容器中的“单词转换map程序”分析

c++primer第五版的第11章关联容器部分的结尾是一个map单词转换程序和无序容器,其中map单词转换程序书上讲了很多,这里只是对书上讲的内容进行补充,更好的理解这个程序。 在书上程序的基础上,我...

C++Primer第11章 一个单词转换的map【程序】

程序的功能: 从规则文件rule.txt读入转换的规则,生成map 从待转换的文件file.txt读取文本,进行单词转换。 main.cpp #include #include #...

深蓝词库转换1.3版本发布——增强单词注音功能

“深蓝词库转换”是我在闲暇时写的一个词库转换程序,实现了各种输入法的用户词库、网络词库(细胞词库)之间的相互转换。目前支持的输入法有:PC端:*搜狗拼音*QQ拼音*QQ五笔(纯汉字)*谷歌拼音*搜狗五...
  • studyzy
  • studyzy
  • 2013年09月10日 14:22
  • 647
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:map——单词的转换
举报原因:
原因补充:

(最多只允许输入30个字)