【问题标题】:How to sort this specific string array by using the following set of rules(?):如何使用以下规则集(?)对这个特定的字符串数组进行排序:
【发布时间】:2014-03-31 01:54:24
【问题描述】:

是的,我是新手,我叔叔要求我使用该功能:

void sortStrings(char str[], const char* delim){...}

对给定的字符数组 str 进行排序,使得 delim 中出现在 str 中的每个字符都将分隔一组字符在 str 中,从而使它们成为您需要按十六进制值排序的单词。在此过程中,我还需要将那些将字符与 delim 分开的单词替换为 ';'。

规则是:我只能使用库<stdio.h>,不能使用malloc/realloc。 显然,这应该使用 n^2 的 O 表示法来完成(n 是 str 中的单词数量,而不是 chars)

这是一个输入和输出的例子:

输入:

char str[] = "aaa*test,hello.world*abcd.zzz"; sortDelim(str, ",.*")

输出: str 现在是:“aaa;abcd;hello;test;world;zzz”

好吧,我现在终于做到了,冒泡排序的东西有点帮助 tyvm :) 注意:如果有人想自己接受这个挑战,我会在这里留下这个帖子?我保证这不容易:P 如果您认为我应该删除它或添加完成的代码,那就问吧(请不要再扣除我的代表>

【问题讨论】:

  • 我很高兴你让它工作并且你发现我的提示很有帮助。不要因反对票而气馁……这里的每个程序员最初都在为这样的小谜题而苦苦挣扎,没有什么是容易的,如果你有心,编程是有回报的,并且有坚持下去的意愿。干杯。

标签: c


【解决方案1】:

你有一个好的开始。在你的第二个 for 循环之后,你有

  1. 用分号替换所有分隔符
  2. 你知道有多少字,size
  3. 你知道每个单词有多少个字母,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),这些维基百科链接解释了它们是如何工作的,并包括 pseudocode 来帮助你开始:

任君挑选,亲自动手。

提示:如果第一个单词比较大于第二个单词,您可能需要一个交换(交换)两个连续单词的子例程。这可以做到in place

假设你有

abcd;aaa

第一个单词大于第二个单词,你需要检测到,并交换单词以便最终得到

aaa;abcd

这是一个图表,可以为您提供总体思路。

【讨论】:

    猜你喜欢
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    相关资源
    最近更新 更多