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

描述:第一对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;
}

《完》

时间: 2024-10-05 06:16:01

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

传入一个中文字符串,返回一个字符串中的中文拼音

/** * @param 传入一个中文字符串 * @return 返回一个字符串中的中文拼音 */ private String getNameNum(String name) { if (!Utils.isStrEmpty(name)) { int len = name.length(); char[] nums = new char[len]; for (int i = 0; i < len; i++) { String tmp = name.substring(i); nums[i] =

编程在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,用空格来分隔单词。

char str[255] = {0}; printf("请输入一个字符串:\n"); scanf("%[^\n]", str);//意思是非'\n'.也就是说只要没有遇到换行就继续输入,当遇到换行符的时候此语句结束.而默认情况是遇到换行语句执行结束,但是str的值只是第一个空格前的值.但这样写,按回车时scanf执行完,中间所有内容包括空格都会输入到str中去. // gets(str); int maxLength = 0, maxIndex = 0; int

[ACM] POJ 1035 Spell checker (单词查找,删除替换增加任何一个字母)

Spell checker Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 18693   Accepted: 6844 Description You, as a member of a development team for a new spell checking program, are to write a module that will check the correctness of given word

字典树的基础,以及在实际项目中对于敏感词的替换的应用

最近刷题时连续遇到两道字典树的题目,所以做一下这个数据结构的总结. 首先什么叫做字典树? 叫 是 我   想 看 听 这种树结构并且把文字或者英文放在里面组成的叫做字典树. 那么字典树有什么用呢? 通过几道题目的练习我发现,字典树主要应用在,对于字符串的分级匹配和查询. 比如在我们如果有三句话,1:我是人,2:我是男人,3:我是中国人 如果一般的我们用三个字符串去存放他们,然后当我们要寻找在这些字符串中是否存在我是中国人的时候,那么就需要一句句匹配过来,如果有1000条这样的数据,那么匹配的速度

一月十日练习习题,1数组数据存入字典并输出2降序 和倒叙 输出数组中内容3对字符串当中信息进行查找是否存在4 把数组当中信息尽心中文排序

// //  main.m //  Pratise_Jan10_1 // //  Created by wangyang on 16/1/10. //  Copyright (c) 2016年 Wangyang. All rights reserved. // #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { /* 第1题 请将如下数据存储成字典,并将字典

python递归练习:生成一个n级深度的字典,例如:[1,2,3,4,5,6] 可以生成{1: {2: {3: {4: {6: 5}}}}},写一个函数定义n级

结果#encoding = utf-8#题目:#生成一个n级深度的字典,例如:[1,2,3,4,5,6] 可以生成{1: {2: {3: {4: {6: 5}}}}},写一个函数定义n级a=[1,2,3,4,5,6] def fun(n,i=0,dict1={}): if i ==n-1: dict1[a[i]] = a[i+1:] if i < n-1: dict1[a[i]] = fun(n,i+1,dict1={}) #print "dict1:",dict1 return

python练习-查找出字典中值最大的键值对

input: # 需求,查找出字典中值最大的键值对 d = {'1':"a",'2':'b','3':'c'} new_tup = zip(d.values(),d.keys()) #('a', '1'), ('b', '2'), ('c', '3') print(max(new_tup)) output: ('c', '3') 原文地址:https://www.cnblogs.com/liangyf/p/11776021.html

9.11排序与查找(三)——给定一个排序后的数组,包含n个整数,但这个数组已被旋转过多次,找出数组中的某个元素

/** * 功能:给定一个排序后的数组,包含n个整数,但这个数组已被旋转过多次,次数不详.找出数组中的某个元素. * 可以假定数组元素原先是按从小到大的顺序排列的. */ /** * 思路:数组被旋转过了,则寻找拐点. * @param a * @param left * @param right * @param x:要搜索的元素 * @return */ public static int search(int[] a,int left,int right,int x){ int mid=(

C++实现字典树数据结构_LeetCode820_字典的压缩编码

用C++实现字典树数据结构的例子: 例题: 单词的压缩编码 给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A. 例如,如果这个列表是 ["time", "me", "bell"],我们就可以将其表示为 S = "time#bell#" 和 indexes = [0, 2, 5]. 对于每一个索引,我们可以通过从字符串 S 中索引的位置开始读取字符串,直到 "#" 结束,来恢复我们