魔咒词典题解——牛客

https://www.nowcoder.com/questionTerminal/c6ca566fa3984fae916e6d7beae8ea7f?orderByHotValue=1&mutiTagIds=5058&page=2&onlyReference=false

下解在杭电上内存超限过不去,牛客上可以,由于主要是练习map而不是hash,因此先不加深究

知识点:
i.    map的find找不到的话返回值为map.end()    find引用具有指定键的元素的位置的迭代器,如果找不到具有键的匹配项,则引用映射中 (map.end()) 最后一个元素后面的位置。
    eg:
    map<int,string> a;
    a[1]="2";
    map<int,string>::iterator it;
    it=a.find(2);
    if(it==a.end())    cout<<"!";
ii:     getline(cin,input)用来输入含空格的字符串 
iii:    getline前如果有输入需要回车的话,务必要加个getchar()清除回车,否则就会被getline接收到\0,注意不是\n,
        eg:
            string a;
        int N;
        scanf("%d",&N);
        while(N--)
        {
            string b;
            getline(cin,b);
            if(b=="\0")    cout<<"!"; 
            cout<<b<<endl;
        } 

#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<map>
#include<string>
using namespace std;
int main()
{ 
	string input;//字典输入
	string end="@END@";
	map<string,string> m;
	while(getline(cin,input))//存储字典 
	{
		if(input==end)	break;
		//找到input的[魔咒]部分并存入magic 
		string  magic,function;
		int mag=input.find("]");//mag为]出现的下标 
		magic=input.substr(0,mag+1);//magic存放的为[魔咒]部分 
		//找到input的功能部分并存入function,其首字母在mag+2,尾字母在size-1
		function=input.substr(mag+2,input.size()-1);
		m[magic]=function;
		m[function]=magic; 
	}
	int N;
	scanf("%d",&N);
	getchar();
	while(N--)
	{
		string find;//查找输入 
		getline(cin,find);
		string ans;
		map<string,string>::iterator it=m.find(find);
		if(it==m.end())//如果不存在 
		{
			cout<<"what?"<<endl;
		}else
		{
			string out=it->second;
			if(out.find("[")!=string::npos)
			{
				string outs=out.substr(1,out.size()-2);
				cout<<outs<<endl;
			}else
				cout<<out<<endl;
		}
		
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值