構造体の配列にデータを再帰的に出力します

user3458225

このように、構造体の配列にデータを再帰的に出力する必要があります。

index, numberOfChildern, child[0]...child[numberOfChildern-1] 

キャッチは、すべての子供のために、私index, numberOfChildern, child[0]...child[numberOfChildern-1]印刷する必要があるということです

typedef struct node point;
typedef point **pointsList;

構造体:

struct node{
  int index; //the order in the instance file
  int x;//x coord
  int y;//y coord
  int parent;//parent in tree when added
  int numChildern;//has val 0 -- 8 maybe, but doesn't matter the way I wrote it
  int *child;    
};

すべての構造体のすべての値が適切に設定されています。これは、タスクを完了するために書き始めた不完全なメソッドです。

void printStringOfChildern(pointsList list, point *point, int fileNum){


if(point->numChildern == 0)
    return;

  //print the index
  char index[calcNumberOfDigitsInAInt(point->index)+3];
  sprintf(index, "%d", point->index);
  strcat(index, ", ");
  print(index, fileNum);

  //print the number of childern
  char chidern[calcNumberOfDigitsInAInt(point->numChildern)+3];
  sprintf(chidern, "%d", point->numChildern);
  strcat(chidern, ", ");
  print(chidern, fileNum);

  //print the childern
  for(int i=0; i<point->numChildern; i++){
    char child[calcNumberOfDigitsInAInt(point->child[i])+3];

//was child[i] now point->child[i]
    sprintf(child, "%d", point->child[i]);
    strcat(child, ", ");
    print(child, fileNum);

    //print out other childern and their data if there is any
    int numChildern = numberOfChildern(list, point -> index);
    if(numChildern > 0){
      printStringOfChildern(list, list[point->child[i]], fileNum);

    }

  }

}

上記のコードはひどく不完全であることに気付くでしょうが、それは私の印刷機能の使用法を示しています

以下のifelseブロックは、出力に出力する方法です。出力は、ターミナルファイルまたは一連のファイルである可能性があります。印刷機能とthisif elseブロックがテストされ、機能することが証明されています。inOutTypeはグローバル変数であり、outputFileNameも同様です。fileIndexは、複数のファイルに印刷する場合にのみ使用され、複数のファイルに印刷する場合は、ファイルがいくつあってもこのメソッドが呼び出されます。これが印刷機能です

if(inOutType == 1 || inOutType == 2){
printLineToOutPut(output, outputFileName, inOutType);

}else{
    printToAInstanceFile(output, fileIndex);

  }

私が編集で行ったのは、サンプルを更新し、これを書くことだけです

Output format:



index, numberOfChildern, child[i]. If child[i] has children then index, numberOfChildern, indexOf(child[i]), numberOfChildernOf(child[i]), child[i]OfChild[i]..... 

メソッドはそのように実行されます

for(int j=0; j<maxNumberOfPoints; j++)
        printStringOfChildern(listOfListOfPoints[i], listOfListOfPoints[i][j], i);
ジョナサン・レフラー

出力がどのように見えるかについての明確な例がない場合、ここに示されているコードのバージョンがあります。正確な長さの計算に時間を費やすのではなく、単に32文字の長さのバッファーを作成することに注意してください。それは多くのメモリではありませんが、目前のタスクには十分です。また、データはありませんでした—私はいくつかを発明しました:

Index 0:  3 children
    Index 1: 0 children
    Index 2: 2 children
        Index 4: 0 children
        Index 5: 0 children
    Index 3: 0 children

他のデータは必要ありません。xyおよびparent当該構造体のメンバーが使用されていない-無関係の除去(MCVEを作成する部分であり、最小限の完全な、検証可能例)。

'fileNum'引数を無視しました。印刷は単純かつ標準出力に対してのみ行われます。必要に応じて、ファイルへの印刷を元に戻すのは簡単です。また、JSONに触発された表記法を使用してデータをレポートし、配列を内に囲み[…]、内部の階層の最上位を除く単一のポイントを囲みました{…}

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

typedef struct node point;
typedef point **pointsList;

struct node
{
    int index; // the order in the instance file
    // int x;//x coord
    // int y;//y coord
    // int parent;//parent in tree when added
    int numChildren;// has val 0 -- 8 maybe, but doesn't matter the way I wrote it
    int *child;
};

static inline void print(const char *str)
{
    printf("%s", str);
}

static void printStringOfChildren(pointsList list, point *point)
{
    // print the index
    char index[32];
    sprintf(index, "%d", point->index);
    strcat(index, ", ");
    print(index);

    // print the number of children
    char children[32];
    sprintf(children, "%d", point->numChildren);
    strcat(children, ", ");
    print(children);

    // print the children
    print("[");
    for (int i = 0; i < point->numChildren; i++)
    {
        if (i > 0)
            print(",");
        print(" { ");
        printStringOfChildren(list, list[point->child[i]]);
        print(" }");
    }
    if (point->numChildren > 0)
        print(" ");
    print("]");
}

int main(void)
{
    point *list[] =
    {
        &(point){ 0, 3, (int[]){ 1, 2, 3 } },
        &(point){ 1, 0, 0 },
        &(point){ 2, 2, (int[]){ 4, 5 } },
        &(point){ 3, 0, 0 },
        &(point){ 4, 0, 0 },
        &(point){ 5, 0, 0 },
    };
    printStringOfChildren(list, list[0]);
    putchar('\n');

    return 0;
}

出力:

0, 3, [ { 1, 0, [] }, { 2, 2, [ { 4, 0, [] }, { 5, 0, [] } ] }, { 3, 0, [] } ]

出力を行う方法は他にもたくさんあります。全体のビジネスsprintf()とはstrcat()偽です-あなたは完全によく使用することができprintf()、私のシナリオで、またはfprintf()より一般的な場合には、まだ多くのプログラムのサイズを小さく、データをフォーマットします。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Goで構造体配列を再帰的に反復します

`fmt :: Display`で構造体を再帰的に出力します

構造体に配列し、彼にデータを入力します

再帰的データ構造の差分ppを自動的に生成します

構造体へのポインタの配列のデータ型を動的に変更します

構造体をconst値の配列にコピーします

Swiftの構造体の配列でデータを再編成するのに助けが必要

選択したデータを構造体の配列にハイブします

構造体をバイト配列に変換し、dbに格納します。データベースを読み取り、バイト配列を取得して、Cで構造体を再作成します

構造体配列からフィールドを抽出して、別の構造体配列に配置します

ファイルからデータを読み取り、構造体の配列に格納します

データオブジェクトを構造体の配列に変換します

Postgresqlデータベースに再帰的なgo構造体を保存する

構造体の構造体配列typedefは不完全なデータを示しています

QByteArrayからのデータを構造体に配置します

HaskellのJSONデータ構造を再帰的に変更する

Postgresltree値を再帰的構造体にマップします

構造体配列に関するデータ構造

構造体配列はデータを消去します

構造体をファイルに出力して、char配列のすべての空の要素を出力します

配列データを構造体に保存する方法は?

構造体に配列データを設定する

構造体ポインターを介して C# から C に構造体の配列を渡す

BigQueryデータに関するGoogleDataStudio、配列の構造体を表示する方法

BigQueryデータに関するGoogleDataStudio、配列の構造体を表示する方法

構造体、構造体内の構造体の配列にメモリを適切に割り当て、その配列をパラメータとして渡す方法

構造体、構造体内の構造体の配列にメモリを適切に割り当て、その配列をパラメータとして渡す方法

構造体の配列をループし、特定の構造体値を出力しますか?

配列からのデータで構造体を初期化します

TOP 一覧

  1. 1

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  2. 2

    CSSのみを使用して三角形のアニメーションを作成する方法

  3. 3

    ZScalerと証明書の問題により、Dockerを使用できません

  4. 4

    ドロップダウンリストで選択したアイテムのQComboBoxスタイル

  5. 5

    別のホストからTomcat Managerアプリにアクセスする

  6. 6

    PyCharmリモートインタープリターはプロジェクトタブにサイトパッケージのコンテンツを表示しません

  7. 7

    Windows 10でのUSB入力デバイスの挿入/取り外しの検出

  8. 8

    Python / SciPyのピーク検出アルゴリズム

  9. 9

    MLでのデータ前処理の背後にある直感

  10. 10

    useRefに反応してコンポーネントをスクロールして表示する

  11. 11

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  12. 12

    パンダは異なる名前の列に追加します

  13. 13

    PictureBoxで画像のブレンドを無効にする

  14. 14

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  15. 15

    Pythonを使用して、リストからデータを読み取り、特定の値をElasticsearchにインデックス付けするにはどうすればよいですか?

  16. 16

    LinuxでPySide2(Qt for Python)をインストールするQt Designerはどこにありますか?

  17. 17

    Material-UIでTextFieldエラーの色を条件付きでオーバーライドする方法

  18. 18

    goormIDEは、ターミナルがロードするデフォルトプロジェクトを変更します

  19. 19

    MatplotlibまたはSeabornを使用して、グループ化されたデータから複数のプロットを生成するにはどうすればよいですか?

  20. 20

    Luaの文字列から特定の特殊文字を削除するにはどうすればよいですか?

  21. 21

    Flutterにファイルピッカープラグインを追加するにはどうすればよいですか?

ホットタグ

アーカイブ