gpt4 book ai didi

c - 动态字符串输入并在 C 中对它们进行排序

转载 作者:行者123 更新时间:2023-11-30 21:07:30 26 4
gpt4 key购买 nike

我想使用 C 动态输入字符串。

输入:由字母组成的单词。

0 < 单词数量 N < 1000

单词的最大长度<= 30

输入示例)gh a b f cde

此外,我会按字母顺序对它们进行排序。我可以使用数组或其他东西吗?

我尝试使用gets但输入错误...

最佳答案

保证单词的最大长度为 30,即 char word[31];每个单词就足够了:

#define WORDSIZE 31
#define WORDLEN_FMT "%30s" //width must be WORDSIZE-1!

/* Read a space-delimited word from `fileptr` and store it in `word`.
*
* Returns:
* 0 - maybe more words to read
* 1 - no more words to read
* -1 - error occurred while reading input
*/
int get_word(FILE *fileptr, char word[WORDSIZE]) {
size_t i;

switch (fscanf(fileptr, WORDLEN_FMT, word)) {
// EOF or an error was encountered.
case EOF:
if (ferror(fileptr)) {
return -1;
}
/* Fallthrough for `feof() != 0`. */
// If nothing was stored in `word`, then we're done.
case 0:
return 1;
}
// A word was stored, so keep going!
return 0;
}

对于读取所有单词,您可以最初分配 1000 个单词,也可以处理动态分配并按某个因子增加数组容量 x有必要的;我个人会预先分配 1000 个单词,因为我知道永远不会超过 1000 个。无论您选择哪一个,跟踪单词数组的长度都很重要,因为您不太可能使用每个单词您分配的内存的一部分(通常是 array_length < array_capacity。)我将把这个留给您。

最后,您可以使用 qsort 轻松对单词进行排序。和 strcmp 周围的包装:

// Compare the words pointed to by `a` and `b`.
int compare_words(const void *a, const void *b) {
return strcmp(*(const char **)a, *(const char **)b);
}

...

// Sort `word_array` using the `compare_words` function.
// The array contains `word_count` words, each with size `WORDSIZE`.
qsort(word_array, word_count, WORDSIZE, compare_words);

关于c - 动态字符串输入并在 C 中对它们进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43443800/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com