1

私はプロジェクトに取り組んでおり、この部分に困惑しています。

stdin から単語を読み取り、それらを char 配列に配置し、ポインターの配列を使用して各単語を指す必要があります。ここで、numwords は単語数を表す int で読み込まれます。

    char words[10000];
    char *wordp[2000];

問題は、ポインターを使用して単語を追加することしかできないことです。 [] を使用して支援することはできなくなりました。

    *wordp = words; //set the first pointer to the beginning of the char array. 
    while (t < numwords){
      scanf("%s", *(wordp + t))  //this is the part I dont know
      wordp = words + charcounter; //charcounter is the num of chars in the prev word
      t++;
    }

    for(int i = 0;words+i != '\n';i++){
      charcounter++;
    }

ポインターと配列に関しては、私はとても混乱しています。

4

2 に答える 2

1

追加のポインター参照を使用してそれを直接インクリメントすると、コードははるかに扱いやすくなります。この方法では、暗算を行う必要はありません。さらに、次の文字列を読み取る前に参照をインクリメントする必要がありscanfます。ポインターは移動しません。

char buffer[10000];
char* words[200];

int number_of_words = 200;
int current_words_index = 0;

// This is what we are going to use to write to the buffer
char* current_buffer_prt = buffer;

// quick memset (as I don't remember if c does this for us)
for (int i = 0; i < 10000; i++)
    buffer[i] = '\0';

while (current_words_index < number_of_words) {

    // Store a pointer to the current word before doing anything to it
    words[current_word_index] = current_buffer_ptr;

    // Read the word into the buffer
    scanf("%s", current_buffer_ptr);

    // NOTE: The above line could also be written
    // scanf("%s", words[current_word_index]);

    // this is how we move the buffer to it's next empty position.
    while (current_buffer_ptr != '\n') 
        current_buffer_ptr++;

    // this ensures we don't overwrite the previous \n char
    current_buffer_ptr++;

    current_words_index += 1;
}
于 2013-03-20T23:03:48.600 に答える
1

やりたいことは比較的簡単です。ストレージ用に 10,000charの配列と 2000 のポインターがあります。まず、最初のポインタを配列の先頭に割り当てます。

wordp[0] = &words[0];

ポインター形式では、これは次のとおりです。

*(wordp + 0) = words + 0;

配列との関係を示すためにゼロを使用しました。一般に、各ポインターを各要素に設定するには、次のようにします。

*(wordp + i) == wordp[i]
words + i    == &words[i]

したがって、ポインター配列内の現在位置を追跡するだけでよく、正しく割り当てられている限り、ポインター配列は配列内の位置を追跡しますchar

于 2013-03-20T23:04:30.450 に答える