0

只是为了好玩,我正在编写一个程序,它将接受用户输入的字符串(甚至可能是文本文档)并打乱字符串中的单词。

我正在尝试使用该strtok函数来分隔字符串中的每个单词。目前我觉得我目前的实现strtok是草率的:

int main(int argc, char *argv[])
{
    char *string, *word;

    if(!(string = getstr()))        //function I wrote to retrieve a string
    {
        fputs("Error.\n", stderr);
        exit(1);
    }
    char array[strlen(string) + 1];     //declare an array sized to the length of the string
    strcpy(array, string);          //copy the string into the array
    free(string);
    if(word = strtok(array, " "))
    {
        //later I'll just write each word into a matrix, not important right now.
        while(word = strtok(NULL, " "))
        {
        //later I'll just write each word into a matrix, not important right now.
        }
    }
    return 0;
}

我觉得必须有一种更简洁的实现方式,strtok而无需在程序中途声明数组。我只是觉得不正确。是否使用strtok正确的方法来解决这个问题?我宁愿不使用固定大小的数组,因为我喜欢一切都是动态的,这就是为什么我开始怀疑使用strtok是正确的方法。

4

2 回答 2

2

如果您的字符串按照您的免费建议进行了分配。然后你不需要将它复制到一个新的缓冲区中(顺便说一句,1 个字符太短了)。使用您提供的缓冲区。

如果它是由a 提供给您的,您只需要复制它,const char *即您不允许修改缓冲区的内容。

使用常规也更好,strtok_r因为常规strtok是不可重入的。

于 2013-02-08T16:14:07.857 回答
0

您可以使用scanf()而不是getstr()strtok()

char word[100];
while(scanf(" %s",word)!=EOF) {
    // use the word string here
}

用户应该停止输入字符

  • EOF = CTRL+ D(对于 Linux)

  • EOF = CTRL+ Z(对于 Windows)

于 2013-02-08T16:12:00.010 回答