map实现单词转换程序的例子

代码来源于c++ primer 10.3

功能:已知一个一一对应的词典,求一小段文档对应的“翻译”

词典如下:

A a B b C c D d E e

 输入:

D D E

 代码:

//需要两个文件,一个是字典文件,一个是输入文件
#include <iostream>
#include <fstream>
#include <sstream>
#include <utility>
#include <map>
#include <string>

using namespace std;
ifstream& open_file(ifstream &in, const string &file)
{
        in.close();
		in.clear();
        in.open(file.c_str());
		return in;
 }
int main(int argc,char ** argv)
{
	map<string, string> trans_map;
	string key, value;
	if (argc != 3)
	{
		throw runtime_error("wrong number of arguments ,we need an dictionary.txt and an input.txt");
	}
	ifstream map_file;
	if (!open_file(map_file,argv[1]))
	{
		throw runtime_error("no dictionary file");
	}
	while (map_file >> key >> value)
	{
		trans_map.insert(make_pair(key, value));
	}
	ifstream input;
	if (!open_file(input, argv[2]))
	{
		throw runtime_error("no input file");
	}
	string line;
	while (getline(input, line))
	{
		istringstream stream(line);
		string word;
		bool firstword = true;
		while (stream >> word)
		{
			map<string, string>::const_iterator map_it = trans_map.find(word);
			if (map_it != trans_map.end())
			{
				word = map_it->second;
			}
			if (firstword)
			{
				firstword = false;
			}
			else
			{
				cout << " ";
			}
			cout << word;
		}
		cout << endl;
	}
	return 0;
}

 操作,makefile:

edit:trans_words.o
	g++ -o edit trans_words.o
trans_words.o:trans_words.cpp
	g++ -c trans_words.cpp

clean: 
	rm trans_words.o

 run.sh

#!/bin/sh
make
./edit dictionary.txt input.txt

 结果:

d d e

 

posted @ 2016-09-12 09:39  司马_羽鹤  阅读(283)  评论(0编辑  收藏  举报