【发布时间】:2015-06-19 22:39:32
【问题描述】:
我正在尝试按字母顺序对结构数组中的字符串进行排序然后打印,但我的代码不起作用。
在过去的几个小时里,我一直试图找出原因,但无法弄清楚。我确信它可能是非常明显的东西,但我只编程了几个星期,我无法弄清楚。
它确实编译没有错误,输出只是原始未排序数组的打印,但没有 aardvark,如下所示:boy 敏锐 阿德尔 猫 词缀 琼脂 嘿嘿 鹭 半开
到目前为止,这是我的代码:
#include <stdio.h>
struct entry
{
char word[15];
char definition[50];
};
struct entry dictionary[100] =
{ {"boy", "a boy " },
{"aardvark", "a burrowing African mammal" },
{"acumen", "mentally sharp; keen" },
{"addle", "to become confused" },
{"cat", "a cat" },
{"affix", "to append; attach" },
{"agar", "a jelly made from seaweed" },
{"ahoy", "a nautical call of greeting" },
{"aigrette", "an ornamental cluster of feathers" },
{"ajar", "partially opened" }
};
int main(void)
{
int i;
void dictionarySort(struct entry dictionary[]);
dictionarySort(dictionary);
for(i = 0; i < 10; ++i)
{
printf("%s\n", dictionary[i].word);
}
return 0;
}
void dictionarySort(struct entry dictionary[])
{
int i, k, j;
struct entry temp[100];
for(i = 0; i <= 9; ++i)
{
for( k = 0; dictionary[i].word[k] != '\0'; ++k)
{
if( (dictionary[i].word[k] > dictionary[i+1].word[k] ) )
{
temp[i] = dictionary[i];
dictionary[i] = dictionary[i+1];
dictionary[i+1] = temp[i];
}
}
}
}
如果有人有任何意见,我将不胜感激。
【问题讨论】:
-
它可以编译吗?如果是这样,当你运行它时会发生什么?如果没有,编译时会出现什么错误?
-
它确实编译没有错误,输出只是原始未排序数组的打印,但没有土豚,如下所示:boy acumen addle cat affix agar ahoy aigrette ajar
-
问题1:你还没有告诉我们
struct entry是如何定义的,但是如果这是C并且word是char *,那么你的比较if(dictionary[i].word[k] > dictionary[i+1].word[k] )是行不通的.您将不得不致电strcmp。 -
i <= 9-->i < 9 -
另外,如果你只是想获得排序的输出(而不是学习如何实现排序算法),调用库函数
qsort通常要容易得多。如果您愿意,我们可以告诉您如何做到这一点。
标签: c arrays sorting struct structure