-1

それで、私は少し読んで、友人から助けを求めました. そして、私はそれを得ると思いますか?実際、プロジェクトでの私の役割は、文字と頻度のテーブルをリンクされたリストに格納することだけです。いくつかのコードを書き留めたので、誰かがそれを改善できれば可能です。

サンプル入力 .txt ファイル (文字と頻度のテーブル):
B1
D3
E7
J9

構造体:

struct node {
  char info;
  int freq;
  struct node * next;   
  struct node * left, *right, *father;
};

typedef struct node * nodeptr;

nodeptr getnode(){  
return malloc(sizeof(struct node));
}

メインプログラム (リンクされたリストにテーブルを格納する部分まで):

string input;
nodeptr list = NULL;
FILE *fopen();
int c;
list = fopen("Huffman Table.txt","r");
c = getc(input) ;
while (c!= EOF)
{
    putchar(c);
    c = getc(input);
}
getch();
fclose(input);

for (node * row = table; row != NULL; row = row->next){
fprintf(file, "%s %i %i", row->info, row->freq);
}

ただし、この部分についてはわかりません。

for (node * row = table; row != NULL; row = row->next)

代わりにこれを使用する必要がありますか?

for(i=0;i<strlen(input);i++){
4

2 に答える 2

0

思わない

for (node * row = table; row != NULL; row = row->next) 最初のセミコロンの前に割り当てを渡すと想定されているため、機能します。

あなたがしていることは...私は本当に知りません..

for(i=0;i<strlen(input);i++){

うまくいくでしょう。しかし、どの文字列入力が保持されると想定されているか、行テーブルをどのように使用しているかがわからないため、わかりません

于 2012-04-17T08:44:50.487 に答える
0

for ループの使用は (構文的に) 完全に問題なく、それほど珍しいことではありません。しかし、「テーブル」ポインタとは何ですか? それはあなたのリストのルートですか?ちょっとした注意 - 「nodeptr」typedef を作成した場合は、そこで使用する必要があります。それがそのためです。私が心配しているあなたのコードの他の部分がいくつかあります

  1. リンクされたリストであるはずだと言ったのに、なぜ構造体に「父」ポインターがあるのですか? 私にはもっと木に見えます。意図していない場合は、そのフィールドを削除してください。

  2. あなたが書いた最後のコードを理解できたかどうか確信が持てません。リストの内容をファイルに書き込みたい場合は、上記の for ループを使用する必要があります。

そして、このコードの一般的な改善点として (これは宿題のように見えますが、そのようにタグ付けする必要があると思います)、std::list<> を使用することです。ただし、C ではなく C++ でコーディングすることが許可されている場合にのみ実行できます。

于 2012-04-17T08:44:58.180 に答える