【数据结构】c++Map的简单应用&& getline()细节

题意:给出字典,字典含有密文和对应的原文。然后读入密文,密文以START开头,以END结尾,其中有若干行,输出密文翻译后的文本,如果单词在字典中无对应的则按原样输出,也保留所有非英文字母的特殊符号。

输入格式

字典部分以START开始,以END结束。

中间部分每行两个单词,第一个是英文,第二个是蒜厂秘籍文字,以单个空格隔开。

接下来是历史书部分,同样以START开始,以END结束。

历史书包含若干行文本,如果其中的单词(由连续的英文字母组成)在字典上出现过,且是蒜厂秘籍文字,则把它替换成英文;否则,保留该单词,也保留所有非英文字母的特殊符号。文本长度不超过 1000010000

输出格式

原稿翻译后的文本。

样例输入:

START

love abc

you dddd

END

START

i abc dddd!

END

样例输出:

i love you!


#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
#include <iterator>
#include <cstring>
#include <map>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main() 
{
	map<string,string> dict;
	string str,str1,str2;
	int change=0; 
	cin>>str;
	while(1)
	{
		cin>>str1;
		if(str1=="END")break;
		cin>>str2;
		dict[str2]=str1;
	}
	cin>>str;
	//getline(cin,str);
	cin.sync(); //!cin是不会读入空格和换行的,但我们输完字符串后,换行符扔滞留在输入缓冲区中,接着就被下一句getline读取了。因此必须先清空缓冲区。
	while(1)
	{
		getline(cin,str);
		if(str=="END")break;
		//str+='\n';
		if(change) cout<<endl; 
		change=1;
		string temp="";
		int size=str.size(),flag=0;
		for(int i=0;i<size;i++)
		{
			if(str[i]>='A'&&str[i]<='Z'||str[i]>='a'&&str[i]<='z')
			{
				temp+=str[i];
				flag=1;
			}
			else 
			{
				if(flag)
				{
					flag=0;
					if(dict.count(temp))cout<<dict[temp];
					else cout<<temp;
					temp="";
				}
				cout<<str[i];
			}
		}
		if(flag)
		{
			if(dict.count(temp))cout<<dict[temp];
			else cout<<temp;
		}
	} 
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值