2017-05-27 8 views
-3

asciiコードを配列インデックスに変換するための単純な関数を扱っています。else-if文に少し問題があります。else if文が予期せず実行されないelse文として動作する

int getIndex(char character) { 
    int code = int(character); 
    int index = -1; 

    if (code == int(' ')){ 
     index = 26; 
    } else if (int('a') <= code <= int('z')) { 
     index = code - int('a'); 
    }  
    return index; 
} 

ザ・条件に関係なく、文字は、zにかない範囲aにあるかどうかの、スペースに罰金や火災を動作しますが、それ以外の他のすべてのケースでのステートメント火災の場合ならば。その状態で私が見ることができない問題はありますか?

+0

これは問題ではありませんが、あなたは( '」「'キャストする必要はありません。または他の文字リテラルのいずれか)を 'int 'に変換します。コンパイラは '=='の反対側の 'int'にマッチするようにそれを変換します。 –

答えて

2

は、複数の比較を含む式をサポートしません(例:など)。あなたはそれらの間の論理と(&&)演算子を持つ2つの式にelse ifブランチで式を分割する必要があります。

if (code == int(' ')){ 
    index = 26; 
} else if (int('a') <= code && code <= int('z')) { 
    // Here -----------------^ 
    index = code - int('a'); 
}  
return index;