這題可先使用map建表,會比較方便
map<string,char> mp = { // 這邊我用的是亂碼當鍵值,字母當值
{".-",'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'}
};
參考程式碼:
#include <iostream>
#include <sstream>
#include <map>
using namespace std ;
map<string,char> mp = {
{".-",'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'}
};
int main() {
int j ;
while( cin >> j ) {
/*這邊要注意!!!
getline( cin , ss ) 會將換行符讀入ss中,但是此時讀入的是換行符而不是數字,
所以會誤以為是讀入了一組額外的數據,從而輸出一個額外的換行
使用cin.ignore()就可以很簡單的避開了
*/
cin.ignore();
for( int i = 0 ; i < j ; i++ ) {
stringstream s ;
string ss , sss , ans ;
getline( cin , ss ) ;
s.str(ss) ;
while( s >> sss ) {
ans += mp[sss] ; //map方便的地方在於它可以直接利用鍵值找到對應的值
}
cout << ans << endl ;
s.clear() ;
}
}
}