首页 > 代码库 > 给定一个字典,通过查找这个字典,替换给定的字符串中的中文为英文

给定一个字典,通过查找这个字典,替换给定的字符串中的中文为英文

描述:第一对START和END中给定的是字典

        第二对START和END是给定字符串


输入:

START

hello nihao

yes shi

like xihuan

world shijie

gril nvhai

END

START

i‘m a nvhai!

i xihuan shijie.

nihao

END


输出:

i‘m a gril!

i like world.

hello


#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <vector>
#include <map>
using namespace std;

const string Start = "START";
const string End = "END";

int main()
{
	map<string, string> myMap;
	string value;
	while (cin >> value){
		if (value == Start)
			continue;
		else if (value == End)
			break;
		else{
			string key;
			cin >> key;
			myMap[key] = value;
		}
	}
	cin.get();
	string linestr;
	vector<string> historyBook;
	while (getline(cin, linestr)){
		if (linestr == Start)
			continue;
		else if (linestr == End)
			break;
		else{
			historyBook.push_back(linestr);
		}
	}
	int size = historyBook.size();
	int line = 0;
	while (line < size){ 
		string& curline = historyBook[line];
		int strSize = curline.size();
		int f = 0, l = 0;
		while (l<=strSize){
			if (l == strSize || curline[l] == ‘,‘ || curline[l] == ‘ ‘ || curline[l] == ‘!‘ || curline[l] == ‘.‘){ //读完一个单词
				char curWord[20];//假设每个单词长度不超过20
				strncpy(curWord, (char*)&curline[f], l - f); curWord[l - f] = ‘\0‘;//把当前读完的单词放入curWord中
				string tmpkey = curWord;
				map<string,string>::iterator it=myMap.find(tmpkey);
				if (it != myMap.end()){//如果未找到,it==myMap.end()
					curline.erase(f, l - f);//删除原来的汉语部分
					curline.insert(f, it->second);//在原来的位置插入所替换的英文
					f = f + (it->second).size()+1; l = f;
					strSize += ((it->second).size() - (it->first).size());//长度改变,所以要更新
				}
				else{
					f = l + 1; l = f;
				}
			}
			else
				++l;
		}
		++line;
	}
	for (int i = 0; i < historyBook.size(); ++i){
		cout << historyBook[i] << endl;
	}
	system("pause");
	return 0;
}


《完》

本文出自 “零蛋蛋” 博客,谢绝转载!

给定一个字典,通过查找这个字典,替换给定的字符串中的中文为英文