1075:What Are You Talking About

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1075

方法:map

思路:一看就是第一反应就是map,后来查了一下还可以用字典树,字典树原来做数学建模的时候搞过一回,有点忘记了,还是用map更方便。如果用map就没什么好说的了,主要是在读入要翻译的文本的时候,一些特殊字符,比如空格换行的处理,我这里借鉴了网上逐个字符判断的一种方法,感觉还可以。由于第一次用map,代码注释的详细一些,将来还备用。

难点:特殊字符处理工作。

#include<iostream>
#include<cstdio>
#include<map>
#include<string>
#include<cstring>
using namespace std;
int main()
{
    string a,b;
    map<string,string> mp; //声明一个map
    map<string,string>::iterator it; //声明一个map迭代器
    cin>>a; //接收SATRT字符串,由于这个字符串是一定要出现的,所以直接接收,无须判断
    while(cin>>a) //接受字典大循环
    {
        if(a == "END") break;  //接收到END,直接跳出接收字典大循环
        cin>>b;   //输入数据
        mp[b] = a; //创建字典
    }
    char s[1000]; //创建字符串数组,注意,由于这里读入的字符比较复杂,先用字符串数组接收
    int i = 0;
    cin>>a; //接收SATRT,原理同上
    getchar(); //接收回车
    char c; //结束临时字符
    while(c = getchar()) //接收文字大循环
    {
        if(c >= 'a' && c <= 'z')
            s[i++] = c;
        else if(c == 'E') //输入的应该是END,所以接收这个字符串和回车然后退出
        {
            scanf("%s",s);
            getchar(); //读入空格换行等字符
            break;
        }
        else
        {
            s[i] = '\0'; //如果不是上述情况,这说明一个单词已经结束
            it = mp.find(string(s));  //查找键值
            if(it != mp.end()) //如果查找键值不是end,这说明该键值存在
                printf("%s",(it->second).data()); //打印出字典
            else
                printf("%s",s); //如果没有找到该键值,原样输出
            i = 0;        //这里i一定要清零,为下一个单词读入做好准备
            printf("%c",c);//此处打印的是空格,换行等特殊字符
        }
    }

}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值