2017-03-10 2 views
0

私はコマンドラインでモールスコードトランスレータを作成していますが、モールスコード相当物を保持している配列にユーザ入力を保持している配列を比較するのに問題があります。ユーザーが入力した場合、「.-」argv配列に格納されている2つの配列を持つCのstrstrメソッドを使用していますか?

const char *morse[SIZE] = { 
"0 ----- ", 
"1 .---- ", 
"2 ..--- ", 
"3 ...-- ", 
"4 ....- ", 
"5 ..... ", 
"6 -.... ", 
"7 --... ", 
"8 ---.. ", 
"9 ----. ", 
"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 argc, char *argv[]) 
{ 
    int i=0; 

for (i = argc-1; i >=0; i--) 
{ 
    argv[i] = argv[i]; 
    printf("%s\n", argv[i]); 
} 

if (argc < 3) 
{ 
    printf("Need atleast two arguments"); 
    return 0; 
} 

for (int i = argc-1; i >= 0; i--) 
{ 
    for (int ii = 0; ii <= SIZE; ii++) 
    { 
     char *pointer = strstr(morse[ii], argv[i]); 

     if (pointer!=NULL) 
     { 
     printf("%c", *morse[ii]); 
     } 
    } 
} 

だから、私は、forループをモールス通過し、見つけることはstrstrを使う「.-」、そしてそれは最初の文字を印刷しますこれは "a"になります。 私はモールス配列の最初の文字を正常に表示することができないと私はそれがstrstrと関係があると推測しています。

+0

注(モールスでE)であるようですすべての '.'を使用するシンボルです。別のコンパレータを使う必要があります。データがあれば、比較のために 'strcmp(&morse [ii] [2]、argv [i])'を使うことができます。 –

答えて

1

strstrは、別の文字列内の部分文字列の出現を検索します。 .-検索は正確に.-を一致させるためになど

、桁2.-以来2 ..---で見つけることができます)のために、桁1.-以来1 .----で見つけることができる)のための成功のためにだからあなたがユーザーの入力を囲む必要がありますスペース。この場合、.-a .-でしか見つかりません。 (3)でマークされた行を参照してください。

直接質問に関連していない
for (int i = argc - 1; i > 0; i--)  // <-- (1) 
{ 
    for (int ii = 0; ii < SIZE; ii++) // <-- (2) 
    { 
     char user_letter[8]; 
     sprintf_s(user_letter, sizeof(user_letter), " %s ", argv[i]); // <-- (3) 
     const char *pointer = strstr(morse[ii], user_letter);   // <-- (3) 

     if (pointer != NULL) 
     { 
      printf("%c", *morse[ii]); 
     } 
    } 
} 

その他の見所:

  • (1) - argv[0]が呼び出されたプログラムのパスですので、実際に(2)ユーザの入力
  • としてそれを処理する必要はありません - morse[]配列インデックスは、ゼロベースの最後のインデックスは、すべてで `はstrstr()` `.`見つけるであろうことSIZE - 1なくSIZE
関連する問題