1

我正在做一个项目,我对这部分感到困惑。

我需要从标准输入读取单词并将它们放在一个 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,000 chars 的存储数组和 2000 个指针。因此,首先您需要将第一个指针分配给数组的开头:

wordp[0] = &words[0];

在指针形式中,这是:

*(wordp + 0) = words + 0;

我用零来展示它与数组的关系。通常,将每个指针设置为每个元素:

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

所以你需要做的就是跟踪你在指针数组中的位置,只要你分配正确,指针数组就会跟踪你char数组中的位置。

于 2013-03-20T23:04:30.450 回答