EOJ 3061: 莫尔斯电码

1.利用二维数组构造莫尔斯码到字母数字标点的双射,其中二维数组下标与莫尔斯码也是一种双射,于是形成了“字符串<->数组序号<->字母、数字”的双射

2.char数组设为全局变量时,里面所有的字符全部默认初始化为'\0',如果不覆盖掉,printf输出字符数组时会输出到'\0'为止

3.ans数组要么手动添加'\0',要么memset一下

代码如下:

#include <bits/stdc++.h>
using namespace std;
//3061:二维数组构造字符串到字母数字的双射

//字符串<->数组序号<->字母、数字
char mapping[][10]={".-","-...","-.-.","-..", ".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--..","-----",".----","..---","...--","....-",".....","-....","--...","---..","----.","/","///","/////"};
char str[2000];
char save[300][10];
char ans[2000];
int T, cnt;

char conver(int x)
{
    if(x<26) return x+'A';
    else if(x<36) return x-26+'0';
    else if(x==37) return ' ';
    else if(x==38) return '.';
}
int main()
{
    cin>>T;
    char ch=getchar();
    while(T--){
        gets(str);
        int len=strlen(str);
        int j=0, k=0, l;
        for(int i=0;i<len;++i){
            if(str[i]!='/') save[j][k++]=str[i];
            else{
                save[j][k]='\0';
                j++, k=0;
                l=i;
                save[j][k++]=str[l];
                l++;
                while(str[l]=='/'){
                    save[j][k++]=str[l];
                    l++;
                }
                //处理边界情况
                save[j][k]='\0';
                j++, k=0;
                i=l;
                if(i<len) save[j][k++]=str[i];
                else break;
            }
        }
        save[j][k++]='\0';
        j++, k=0;
        int wordNum=j;
        int m=0;//记录ans数组的值,覆盖\0字符,否则printf读到\0结束
        for(int i=0;i<wordNum;++i)
            for(int j=0;j<39;++j)
                if(strcmp(save[i],mapping[j])==0&&strcmp(save[i],mapping[36])!=0) ans[m++]=conver(j);

        ans[m]='\0';//或者重新初始化ans数组
        printf("case #%d:\n",cnt++);
        printf("%s\n",ans);
    }
    return 0;
}
/*
3
.../---/...
-/..../../...///../...///--/---/.-./..././//-.-./---/-.././////-.../-.--/.
-./---///.----/..---/-----
*/

猜你喜欢

转载自www.cnblogs.com/ChenyangXu/p/10506883.html
今日推荐