0

次の配列があります。

int A[] = {0,1,1,1,1, 1,0,1,0,0, 0,1,1,1,1};
int B[] = {1,1,1,1,1, 1,0,1,0,1, 0,1,0,1,0};
int C[] = {0,1,1,1,0, 1,0,0,0,1, 1,0,0,0,1};
//etc... for all letters of the alphabet 

そして、5x3 LED マトリックスに文字を出力する関数:

void printLetter(int letter[])

私は文字列を持っています:

char word[] = "STACKOVERFLOW";

文字列の各文字を printLetter 関数に渡したいと思います。

私は試した:

int n = sizeof(word);

for (int i = 0; i < n-1; i++) {  
    printLetter(word[i]);
}

しかし、次のエラーが表示されます: 「char」から「int*」への変換が無効です

私は何をすべきですか?

ありがとう!!

4

5 に答える 5

5

パラメータ タイプ エラーの背後には、より深い問題があります。char と対応するint[].

printLetterとして再定義

void printLetter(char letter)

コンパイラは満足しますが、問題自体は解決しません。の内側または外側に関係なく、特定printLetterの に対応する を取得する必要があります。int[]char

これを達成するための単純な力ずくのswitch方法は、 を使用することですが、より良い方法は、次のような 2 番目の配列を使用することです。

void printLetter(char letter) {
  static int* charToMatrix[] = { A, B, C, ... };
  int* matrixToPrint = charToMatrix[letter - 'A'];
  // print the matrix
}

これは一例であることに注意してください。私は現在 C コンパイラにアクセスできないので、すぐに動作することを保証できませんが、うまくいけば、要点を十分に示しています。また、境界チェックがないため、「不明な」文字を印刷しようとすると、奇妙なランダムな場所でメモリにアクセスし、クラッシュする可能性があります。

このソリューションは、大文字で機能するはずです。小文字やその他の文字も出力する必要がある場合は、「既知の」行列に対応するインデックスの要素のみが埋められ、残りは NULL に設定される 256 要素の配列を使用することをお勧めします。

于 2010-05-22T21:02:26.133 に答える
2

「a」を「stackoverflow」からA(intの配列)に簡単に変換することはできません。文字を表すすべての配列を 1 つの文字で定義し、文字を int に変換して取得できます。

于 2010-05-22T21:00:19.133 に答える
2

必要なことは、文字から配列の 1 つに変換することです。したがって、文字「A」がある場合は、 array を使用する必要がありますA。これを行う最も簡単な方法は、ルックアップ テーブルを使用することです。

int *lookup[256];  // assuming ASCII
memset(lookup, 0, sizeof(lookup));

lookup['A'] = A;
lookup['B'] = B;
...

次に、文字がある場合、適切な配列を取得できます。

void printletter(char c);
{
    int *data = lookup((unsigned char)c);

    // In case you get a letter that you don't know how to display
    if (data != NULL)
    {
        // display with data
    }
}

実行時に配列を構築する代わりに、コンパイル時に配列を構築することもできますが、手動で NULL ポインターを挿入する必要があるため、少し難しくなります。

int *lookup[256] = {
    NULL,   // you need a total of 65 NULL's
    NULL,
    ...
    A,      // so this is at the correct position
    B,
    C,
    ...
};
于 2010-05-22T21:05:14.550 に答える
1

関数は として宣言されてvoid printLetter(int letter[])います。これは、int の配列へのポインターを取ることを意味します。一方、wordは char の配列であり、word[i]は char であり、まったく適切な型ではありません。printLetter()本当に単一の文字を出力するだけの場合は、その引数を char に変更する必要があります。

于 2010-05-22T20:59:55.873 に答える
0
void printLetter(int letter[]) 

する必要があります void printLetter(char letter)

なぜなら: wordis a char[]word[i]は文字です。

于 2010-05-22T21:00:09.743 に答える