#33810: C++ stringstream , map 解 (懶得鍵表可以直接複製)


alex950301 (alex0301)

學校 : 新北市立新莊高級中學
編號 : 141423
來源 : [210.71.71.205]
最後登入時間 :
2024-04-16 16:27:37
b515. 摩斯電碼-商競103 -- 103學年度商業類程式設計競賽模擬題 | From: [61.64.1.159] | 發表日期 : 2023-02-04 15:47

這題可先使用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() ;
        }
    }
}

 
ZeroJudge Forum