-1

私は C プログラミングの初心者で、問題を解決するためのプログラミング アプローチを探しています。プログラミングする最初のソフトウェアとして、テキスト ファイルから 2 次元行列を読み取り、それを配列に格納しようとしました。私の意図は、グラフで昔ながらの最短経路アルゴリズムの文字列内の数値を比較することです。

最初に、各行を読み取り、fscanf で解析し、strcpy を使用して各行を 2 次元配列に格納するアプローチがありました。fprint をループで使用してディスプレイに表示することはできましたが、複数の [] 行を 1 つの [][] マトリックスにコピーすることは構造的に実行不可能なようです。コンパイラは、strcpy に関して「互換性のないポインタ型で引数 2 を転送する」などの厄介なコメントで私を苦しめます。穴のアイデアは、C では実行不可能な行き止まりのようです。

それで、ファイルから行列を読み込んで、値を比較するために統一された文字列配列にする方法を知っている人はいますか? ポインター、構造体、何か?良い解決策は、マトリックスをいくつかの浮動小数点変数として読み取る可能性です。

たぶん、より多くの経験を積んだあなたの何人かはアイデアを持っていますか?

ありがとう!スレックス

4

3 に答える 3

0

テキストファイルの構造によって異なります。ファイル内のすべての数字がこのような場合

11223344
44556677

次に、次のようなものを使用できます

#include <stdio.h>
#include <string.h>    

char *charbuffer, ROWS, COLS;
char matrix[ROWS][COLS]
for (row = 0; row < ROWS; row++) {
    for (col = 0; col < COLS; col++) {
        if (fgets(charbuffer, 3, file)) {
            matrix[row][col] = strdup(charbuffer);
        }
    }
}

whereは時刻から文字をfgets(buffer, n, file)取得し、文字を保存します(余分な文字は文字列で終了します)。この特定のケースでは、最初の反復で が取得され、バッファに保存され、それがバッファにコピーされます。n - 1filenbuffer\01111\0

と の違いstrcpystrdup理解しておいてください。上記のループは失敗し、行列が77s で埋められます。

ファイルの構造が異なる場合は、fgetsを のような適切な関数に置き換えることができますfscanf

編集:strdupは POSIX 関数です。たまたま Windows を使用している場合、または機能を利用できない場合は、次のように使用できます。

char *strdup(const char *string) {
    char *pointer = malloc(strlen(string) + 1);
    if (pointer) { 
        strcpy(pointer, string); 
    }
    return pointer;
}
于 2013-02-18T01:12:32.417 に答える
0

マトリックスを文字列に変換して文字列として渡し、文字列をパラメーターとして送信する関数で、分割を配列に戻します。

編集

おっと、質問全体を読んでいないので、私の考えを無視してください。

于 2013-02-18T01:13:15.483 に答える