1

ケースの値が2進数である必要があるなどのスイッチケースを行っています01,010,0100,0,00,000,

switch(Code)
{
          case 0:
               {
                   printf("A");
                   break;
                   }
          case 00:
               {
                   printf("B");
                   break;
                   }
          case 000:
               {
                   printf("C");
                   break;
}

000 を入力すると 0 として保存されることはわかっています。printf("C")

4

3 に答える 3

3

どの表現でも同じ数字であるため、なぜこれらの数字を区別したいかは想像できませんが、文字列として調べる必要があると思います。Cでは文字列をswitchステートメントに入れることができないため、if/elseステートメントのシーケンスが必要になります。

void selectString(char *input)
{
    if(strcmp(input, "0") == 0)
    {
        printf("A");
    }
    else if(strcmp(input, "00") == 0)
    {
        printf("B");
    }
    else if(strcmp(input, "000") == 0)
    {
        printf("C");
    }
}

そうは言っても、あなたが求めていることはXY問題のように見えます。つまり、Xを解くためにそれを行う必要があると思うので、奇妙なことYを行う方法を求めています。何をしようとしているのですか。

于 2012-08-10T15:29:59.827 に答える
3

あなたの問題は、デコードしようとしている一連のビットがあることです(回線上の信号)。しかし、情報のパケットがいつ開始されるかはわかりません。エンコーディングで欠けているのは、文字の始まりです。(単語の開始もありません。単語間のスペースを表すために未使用の数字を作成することをお勧めします)。

あなたのプログラムでは、各一連のビットの前に 1 の開始ビットを付けることをお勧めします (これは実際には送信されませんが、何も送信されていないため暗示されていることに注意してください)。次に、値は 10、100、および 1000 です。これらをバイナリ表現で簡単に比較できます。最小の有効な一連のビットは文字 'e' であり、2 進数では 10 になることに注意してください。単一の 1 ビットは有効な値ではありません。ここにあるモールス符号のエントリをちらりと見ただけで、アルファベットが、迅速な実装のためにルックアップ テーブルに格納できる番号付けシステムを形成しているように見えます。

于 2012-08-10T16:14:45.457 に答える
0

変数でこれをモールス (0 = ドット、1 = ダッシュと推測しています) に使用しているとします。「コード」は文字列でなければなりません。

switch(Code)
{
    case "01":   //".-"
        printf("A");
        break;
    case "100":   //"-.."
        printf("B");
        break;
    case "0001":   //"...-"
        printf("V");
    break;
}
于 2012-11-06T17:32:00.993 に答える