5

C言語を使用して文字列の行を動的に保存したい。

例えば

sadasdasda5245sdf

fadfa6456

fasdf90-70=790

そのような行の数と各行の長さは何でもかまいません.全体を動的に保存する方法はありますか.

4

6 に答える 6

7

必要な要素の最大数を事前に知らなくても、項目を動的に追加できるデータ構造がいくつかあります。リンク リスト、二分探索木、平衡木、試行、ヒープなどがあります。

同様に、さまざまな長さの文字列を動的に割り当てる方法はたくさんあります。

最も簡単な方法は、単純なリンク リストを使用することです。

typedef struct _node {
    struct _node *next;
    char *value;
} node_t;

リストの最初の項目であるheadを追跡し、の各フィールドはリストの次のノードを指します。たとえば、リストをトラバースするには、次のように記述します。

currentNode = head;
while(currentNode != NULL) {
    /* do something with currentNode->value */
    currentNode = currentNode->next;
}

具体的に何をしたいのかわからないので、これ以上の提案はできません。

データ構造に対して頻繁に実行する操作は何ですか? 文字列を単純に反復処理し、文字列を検索し、文字列を追加および削除しますか?

于 2009-07-25T17:20:42.403 に答える
3

動的に拡張できるデータ構造がいくつかあります。前の2つの返信が示唆するように、ポインターの配列、リンクリストなどを使用できます。

それはすべて、実装の要件によって異なります。

  1. これらの文字列に複数回アクセスしますか?
  2. それらを取得したら、それらすべてにアクセスするつもりですか (何らかの計算のために)、または一度に 1 つずつアクセスするつもりですか (つまり、辞書)?
  3. スペース/メモリに関する考慮事項は何ですか?
  4. それらを取得する順序に重要性はありますか (キューまたはスタックの実装を示唆しています)?
  5. 文字列間に固有の接続がありますか (ツリーまたはツリーのような構造を示唆しています)?

データ構造について少し読んで、自分に最も適したものを決定することをお勧めします。それらはすべて C で実装できます。このウィキペディアの記事
を見てください(理論をスキップしたい場合は、オプションのリストについては「例」セクションに移動してください) 。

于 2009-07-25T17:36:34.667 に答える
2

一部の回答が示唆するものとは異なり、車輪を再発明する理由はほとんどありません。

独自のライブラリを開発しないでください。このような抽象化を実装するフリー ソフトウェア ライブラリがいくつかあります。一例として、動的に成長する文字列動的に成長するリストなど、多くの型を持つglibがあります。

于 2009-07-25T19:58:49.543 に答える
2

歩いてはいけませんが、Princeton の Web サイトにアクセスして、Dave Hanson のC Interfaces and Implementationsを入手してください。と呼ばれるデータ構造Seq_Tは、行のリストを動的に構築するのに最適です。Dave はバッファリング リーダーを提供していませんが、行を有限のバッファに読み込んで、 を使用して結果を変換し、Text_put1 つのバッファに対して行が大きすぎる場合は、 を使用して結果を結合できますText_cat。CII コードは、すべての動的な成長を管理します。

于 2009-07-25T17:53:54.850 に答える
0

%s動的に格納するには、以下に示すように 'm' フラグを使用できます。

char *variable;
scanf ("%ms", &variable);
/* use variable */
free(variable);

が指す文字列はvariable、データを保持するのに十分です。

free使用後の変数に対する責任はあなたにあることに注意してください。

于 2010-03-04T06:52:24.790 に答える