zoukankan      html  css  js  c++  java
  • ZOJ 1068 P,MTHBGWB

    原题链接

    题目大意:给定一个字符串,先用Morse Code编码,把编码倒序,再解码成字符串。现给定处理后的字符串,求原始信息。

    解法:用C++String类的函数。每次读入一个字符,就在string后面接上,并且保存字符对应morse码的长度。这里要声明一下,真正的morse码也是有句号、问号这些常用标点符号的,但不是题目里给出的那种形式。比如,句号是“.-.-.-”。

    参考代码:

    #include<iostream>
    #include<string>
    using namespace std;
    
    string code[30]={".-","-...","-.-.","-..",".","..-.","--.","....","..",".---",
    				"-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-",
    				"...-",".--","-..-","-.--","--..","..--",".-.-","---.","----"};
    
    
    int main(){
    	int i,j,k,len,n,num[100],cases=0;
    	string str,ss;
    
    	cin>>n;
    	while(n--){
    		cases++;
    		cin>>str;
    		len=str.length();
    		i=0;
    		string morse="";
    		while(i<len){
    			if(str[i]>64&&str[i]<91){
    				morse.append(code[str[i]-'A']);
    				num[len-1-i]=code[str[i]-'A'].size();
    			}				
    			else{
    				switch(str[i]){
    				case '_': morse.append("..--");break;
    				case ',': morse.append(".-.-");break;
    				case '.': morse.append("---.");break;
    				case '?': morse.append("----");break;
    				}
    				num[len-1-i]=4;
    			}
    			i++;
    		}
    		i=j=0;
    		while(i<len){
    			k=0;
    			ss=morse.substr(j,num[i]);
    			j+=num[i];
    			if(ss=="..--"){str[i++]='_';continue;}
    			if(ss==".-.-"){str[i++]=',';continue;}
    			if(ss=="---."){str[i++]='.';continue;}
    			if(ss=="----"){str[i++]='?';continue;}
    			while(k<26){
    				if(ss.compare(code[k])==0){
    					str[i++]=k+'A';
    					break;
    				}
    				k++;
    			}
    		}
    		cout<<cases<<": "<<str<<endl;
    
    
    	}
    		
    
    
    	return 0;
    }
    
  • 相关阅读:
    excel上传和下载
    SublimeText快捷键大全(附GIF演示图)
    JS求多个数组的重复数据
    js各种宽高(3)
    js各种宽高(2)
    js各种宽高(1)
    echarts简单使用案例
    js小技巧
    原生jdbc执行存储过程
    Cron和Spring定时任务
  • 原文地址:https://www.cnblogs.com/naive/p/3568759.html
Copyright © 2011-2022 走看看