poj 1051-P,MTHBGWB-Greater New York 2001
#include <iostream>
#include <string>
using namespace std;
int getLength(char temp);
string getMorse(char temp);
char getLetter(char* num,int ci,int l);
int main(){
int m;
cin>>m;
cin.get();
int num[101];
int numlength=0;
char codes[401];
int codeslength=0;
string temp;
string tem;
int tt;
for(int mm=0;mm<m;mm++){
getline(cin,temp);
//cout<<temp;
tt=0;
numlength=0;
codeslength=0;
while(tt<temp.length()){
//cout<<temp[tt]<<endl;
num[numlength++]=getLength(temp[tt]);
tem=getMorse(temp[tt]);
for(int i=0;i<num[numlength-1];i++){
codes[codeslength++]=tem[i];
}
tt++;
}
//cout<<tt<<endl;
//for(int i=0;i<numlength;i++)
// cout<<num[i]<<" ";
//cout<<endl;
//REVERSE
int te;
for(int i=0;i<numlength/2;i++){
te=num[i];
num[i]=num[numlength-i-1];
num[numlength-i-1]=te;
}
//for(int i=0;i<numlength;i++)
// cout<<num[i]<<" ";
//cout<<endl;
//for(int i=0;i<codeslength;i++)
// cout<<codes[i];
//cout<<endl;
int ci=0;
cout<<mm+1<<": ";
for(int i=0;i<numlength;i++){
cout<<getLetter(codes,ci,num[i]);
ci+=num[i];
}
cout<<endl;
}
return 0;
}
char getLetter(char* num,int ci,int l){
string t=num;
t=t.substr(ci,l);
//cout<<t<<endl;
if(t==".-"){
return 'A';
}
else if(t=="-..."){
return 'B';
}
else if(t=="-.-."){
return 'C';
}
else if(t=="-.."){
return 'D';
}
else if(t=="."){
return 'E';
}
else if(t=="..-."){
return 'F';
}
else if(t=="--."){
return 'G';
}
else if(t=="...."){
return 'H';
}
else if(t==".."){
return 'I';
}
else if(t==".---"){
return 'J';
}
else if(t=="-.-"){
return 'K';
}
else if(t==".-.."){
return 'L';
}
else if(t=="--"){
return 'M';
}
else if(t=="-."){
return 'N';
}
else if(t=="---"){
return 'O';
}
else if(t==".--."){
return 'P';
}
else if(t=="--.-"){
return 'Q';
}
else if(t==".-."){
return 'R';
}
else if(t=="..."){
return 'S';
}
else if(t=="-"){
return 'T';
}
else if(t=="..-"){
return 'U';
}
else if(t=="...-"){
return 'V';
}
else if(t==".--"){
return 'W';
}
else if(t=="-..-"){
return 'X';
}
else if(t=="-.--"){
return 'Y';
}
else if(t=="--.."){
return 'Z';
}
else if(t=="..--"){
return '_';
}
else if(t=="---."){
return '.';
}
else if(t==".-.-"){
return ',';
}
else if(t=="----"){
return '?';
}
}
string getMorse(char temp){
switch(temp){
case 'A':return ".-";
case 'B':return "-...";
case 'C':return "-.-.";
case 'D':return "-..";
case 'E':return ".";
case 'F':return "..-.";
case 'G':return "--.";
case 'H':return "....";
case 'I':return "..";
case 'J':return ".---";
case 'K':return "-.-";
case 'L':return ".-..";
case 'M':return "--";
case 'N':return "-.";
case 'O':return "---";
case 'P':return ".--.";
case 'Q':return "--.-";
case 'R':return ".-.";
case 'S':return "...";
case 'T':return "-";
case 'U':return "..-";
case 'V':return "...-";
case 'W':return ".--";
case 'X':return "-..-";
case 'Y':return "-.--";
case 'Z':return "--..";
case '_':return "..--";
case '.':return "---.";
case ',':return ".-.-";
case '?':return "----";
default:return "";
}
}
int getLength(char temp){
switch(temp){
case 'A':return 2;
case 'B':return 4;
case 'C':return 4;
case 'D':return 3;
case 'E':return 1;
case 'F':return 4;
case 'G':return 3;
case 'H':return 4;
case 'I':return 2;
case 'J':return 4;
case 'K':return 3;
case 'L':return 4;
case 'M':return 2;
case 'N':return 2;
case 'O':return 3;
case 'P':return 4;
case 'Q':return 4;
case 'R':return 3;
case 'S':return 3;
case 'T':return 1;
case 'U':return 3;
case 'V':return 4;
case 'W':return 3;
case 'X':return 4;
case 'Y':return 4;
case 'Z':return 4;
case '_':return 4;
case '.':return 4;
case ',':return 4;
case '?':return 4;
default:return 0;
}
}www.zzzyk.com
作者:doom_ood
补充:软件开发 , C++ ,