2017-12-27 63 views
0

我有一個函數,將用戶輸入的文字(它也翻譯數字)轉換爲莫爾斯電碼,但我不明白爲什麼包含字母表的數組在莫爾斯代碼:米[37] [10]是一個二維數組?我瞭解到37是由字母,數字和空格的數量組成的,總數爲37,但爲什麼是10?文本到莫爾斯電碼在C

這是我的代碼:

void textoMorse(){ 
    int i,j; 
    char texto[37] = { 
     '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', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ' ' 
    }; 
    char m[37][10]={ 
     {".-,"}, {"-...,"}, {"-.-.,"}, {"-..,"}, {".,"}, {"..-.,"}, 
     {"--.,"}, {"....,"}, {"..,"}, {".---,"}, {"-.-,"}, {".-..,"}, 
     {"--,"}, {"-.,"}, {"---,"}, {".--.,"}, {"--.-,"}, {".-.,"}, 
     {"...,"}, {"-,"}, {"..-,"}, {"...-,"}, {".--,"}, {"-..-,"}, 
     {"-.--,"}, {"--..,"}, {".----,"}, {"..---,"}, {"...--,"}, 
     {"....-,"}, {".....,"}, {"-....,"}, {"--...,"}, {"---..,"}, 
     {"---.,"}, {"-----,"}, {"//"} 
    }; 
    char frase[1000]; 
    gets(frase); 
    fflush(stdin); 
    for(i=0; frase!='\0'; i++){ 
     for(j=0; j<37; j++){ 
      if(frase[i] == texto[j]){ 
       printf("%s",m[j]); 
      } 
     } 
    } 
} 
+9

這是因爲莫爾斯電碼符號長度超過1個字符。你需要爲他們騰出空間,而10是莫爾斯電碼最糟糕的情況。 – VladP

+4

請爲神的愛格式化您的代碼 – ubadub

+2

另外:我想知道爲什麼每個摩爾斯電碼需要一個終止逗號,當每個包含終止nul''\ 0''。 –

回答

1

m是一個二維陣列。把它看成有37行,每行有10個字符。一個C字符串在每行中被編碼,並且被一個你看不到的\0字符隱式終止。例如,{".....,"}行包含5個'.'字符,1個'.'字符和一個終止字符。該行中剩餘的3個字節默認爲'\0'個字符。