HDU4690

来源:互联网 发布:外文电子图书数据库 编辑:程序博客网 时间:2024/06/06 16:27

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
原创粉丝点击