HDU4690

HDU4690 EBCDIC

题目描述:给出一个两个字符表,要求你对输入的字符信息转换成第二个表的字符信息。输入包含一对对十六进制的数(X,Y),表示该字符在第一个字符表的第X行第Y列上,然后要你输出该字符在第二个字符表的坐标(X2,Y2)。

输入:一行由大写16进制数字组成的字符串(每两个数表示一个字符在表一中的坐标)。

输出:对面的字符表二的坐标。

分析:读入一个坐标(X,Y)转换成一个字符,然后根据该字符的ASCII码找到字符表二保存坐标的数据的下标,对应输出即可。

代码错了好多次,两个点原因:

1.char S[10000000];这个应该定义为全局变量

2.while(scanf("%s",s))应改为while(scanf("%s",s)==1)

#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
using namespace std;
int change(char a)
{
    if(a>='A'&&a<='Z')return a-'A'+10;
    else return a-'0';
}
char s[10000000];
int main()
{
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    string str1[]={"NUL","SOH","STX","ETX","XXX","HT","XXX","DEL","XXX","XXX","XXX","VT","FF","CR","SO","SI","DLE","DC1","DC2","DC3","XXX","XXX","BS","XXX","CAN","EM","XXX","XXX","IFS","IGS","IRS","IUS*ITB","XXX","XXX","XXX","XXX","XXX","LF","ETB","ESC","XXX","XXX","XXX","XXX","XXX","ENQ","ACK","BEL","XXX","XXX","SYN","XXX","XXX","XXX","XXX","EOT","XXX","XXX","XXX","XXX","DC4","NAK","XXX","SUB","SP","XXX","XXX","XXX","XXX","XXX","XXX","XXX","XXX","XXX","XXX",".","<","(","+","|","&","XXX","XXX","XXX","XXX","XXX","XXX","XXX","XXX","XXX","!","$","*",")",";","XXX","-","/","XXX","XXX","XXX","XXX","XXX","XXX","XXX","XXX","XXX",",","%","_",">","?","XXX","XXX","XXX","XXX","XXX","XXX","XXX","XXX","XXX","`",":","#","@","\'","=","\"","XXX","a","b","c","d","e","f","g","h","i","XXX","XXX","XXX","XXX","XXX","XXX","XXX","j","k","l","m","n","o","p","q","r","XXX","XXX","XXX","XXX","XXX","XXX","XXX","~","s","t","u","v","w","x","y","z","XXX","XXX","XXX","XXX","XXX","XXX","^","XXX","XXX","XXX","XXX","XXX","XXX","XXX","XXX","XXX","[","]","XXX","XXX","XXX","XXX","{","A","B","C","D","E","F","G","H","I","XXX","XXX","XXX","XXX","XXX","XXX","}","J","K","L","M","N","O","P","Q","R","XXX","XXX","XXX","XXX","XXX","XXX","\\","XXX","S","T","U","V","W","X","Y","Z","XXX","XXX","XXX","XXX","XXX","XXX","0","1","2","3","4","5","6","7","8","9","XXX","XXX","XXX","XXX","XXX","XXX"};
    string str2[]={"NUL","SOH","STX","ETX","EOT","ENQ","ACK","BEL","BS","HT","LF","VT","FF","CR","SO","SI","DLE","DC1","DC2","DC3","DC4","NAK","SYN","ETB","CAN","EM","SUB","ESC","IFS","IGS","IRS","IUS*ITB","SP","!","\"","#","$","%","&","\'","(",")","*","+",",","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~","DEL"};


    while(scanf("%s",s)==1)
    {
        int n=strlen(s);
        for(int i=0;i<n;i+=2)
        {
            int p=change(s[i])*16+change(s[i+1]);
            int t=0;
            while(t<128&&str1[p]!=str2[t])t++;
            printf("%02X",t);
        }
        printf("\n");
    }


    return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值