【发布时间】:2017-11-29 12:55:35
【问题描述】:
我想根据numbers_column3 值按升序打印多个不同类型的数组。我有两个指针数组和一个浮点数组。我希望它们像 excel 文档一样保持组合在一起,第一行有 a1、a2 和 a3。我每列有三个数组。我展示的代码只是一个简单的例子。目前我的数组中有大约 20k 个值。有没有办法避免典型的冒泡排序?这将需要大量 malloc 和 strcpy 操作。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(int argc, char **argv)
{
char *q6_tag_strings_line_column1[2000] = {0};
char *q6_nationality_strings_line_column2[2000] = {0};
float numbers_column3[2000] = {0};
q6_tag_strings_line_column1[0] =
malloc(strlen("echo")+1);
strcpy(q6_tag_strings_line_column1[0],
"echo");
q6_nationality_strings_line_column2[0] =
malloc(strlen("hi")+1);
strcpy(q6_nationality_strings_line_column2[0],
"hi");
numbers_column3[0] = 5;
q6_tag_strings_line_column1[1] =
malloc(strlen("how")+1);
strcpy(q6_tag_strings_line_column1[1],
"how");
q6_nationality_strings_line_column2[1] =
malloc(strlen("are")+1);
strcpy(q6_nationality_strings_line_column2[1],
"are");
numbers_column3[1] = 7;
q6_tag_strings_line_column1[2] =
malloc(strlen("you")+1);
strcpy(q6_tag_strings_line_column1[2],
"you");
q6_nationality_strings_line_column2[2] =
malloc(strlen("what")+1);
strcpy(q6_nationality_strings_line_column2[2],
"what");
numbers_column3[1] = 4;
return 0;
}
预期结果是
you what 4
echo hi 5
how are 7
【问题讨论】:
-
为什么不将
struct与tag、nationality和number字段一起使用,然后使用qsort()对这些结构的数组进行排序? -
如果您还没有了解结构,那么您必须使用“并行数组”。如果您了解结构,请使用它们;这将使生活变得更轻松。此外,如果您的机器上没有可用的
strdup(),请编写您自己的版本并使用它。它大大减少了代码。 (extern char *strdup(const char *str); char *strdup(const char *str) { size_t len = strlen(str) + 1; char *rv = malloc(len); if (rv != 0) memmove( rv, str); return rv; }`(如果malloc()失败,您甚至可以决定中止或退出——这意味着您不必检查错误返回。) -
@JonathanLeffler 我大概在 10 年前了解了结构,并且每年最多只使用一次,所以我对它们的记忆真的很模糊。我能够以最少的问题基本理解戴维斯。