是的,我是新手,我的叔叔挑战我使用这个功能:
void sortStrings(char str[], const char* delim){...}
以某种方式对给定的char数组 str 进行排序, str 中显示的每个字符都将分隔一组字符在 str 中,从而使它们成为您需要按十六进制值排序的单词。在此过程中,我还需要将 delim 中的字符分隔为&#39 ;;'。
规则是:我可能只使用库<stdio.h>
而我无法使用malloc / realloc。
显然这应该用n ^ 2的符号来表示(n是str中的单词数量,而不是字符)
这是输入和输出的一个例子:
的输入 的
char str [] =&#34; aaa * test,hello.world * abcd.zzz&#34 ;; sortDelim(str,&#34;,。*&#34;)
输出: str现在是:&#34; aaa; abcd; hello; test; world; zzz&#34;
嗯,我现在最终管理了它,泡泡排序的东西有点帮助了这个问题:) 注意:我会留下这个帖子,以防有人想对自己采取这个挑战吗?这很容易我保证:P如果您认为我应该删除它或添加完成的代码,那么请问(请不要再扣除我的代表&gt;&lt;)
答案 0 :(得分:1)
你有一个良好的开端。在你的第二个for循环之后你有
size
letters
一个观察结果是您已将letters
分配为1000个条目。这似乎已经足够了,但它真的吗?你怎么知道str中有多少单词?你没有。并且你不能使用malloc动态分配,所以你可能需要寻找一个不需要查找表的算法吗?您需要一个有效in place
http://en.wikipedia.org/wiki/In-place_algorithm
下一步是什么?你需要对单词进行排序。有许多排序算法。你想要一些简单的东西,并且允许复杂度为O(n ^ 2)。这是一个排序算法列表:
http://en.wikipedia.org/wiki/Sorting_algorithm
请注意,在表格中,在“其他注释”下,它告诉您某些算法是“微小的代码大小”,听起来不错。首先按“其他注释”排序表,然后按“平均”复杂度排序(单击列标题中的三角形)。您现在有两种算法使用方法“交换”(即in place
),Tiny code size
和平均复杂度O(n ^ 2),这些维基百科链接解释了它们的工作原理,并包含{{ 3}}让你开始:
选择并尝试一下。
提示:如果第一个单词比第二个单词大,则可能需要一个子程序来交换(交换)两个连续的单词。这可以in place
完成。
假设你有
abcd;aaa
第一个单词大于第二个单词,你需要检测到它,并交换单词以便最终得到
aaa;abcd
这是一个可以为您提供一般概念的图表。