【发布时间】:2020-05-30 23:33:45
【问题描述】:
我是一名计算机科学一年级的学生,我们的老师布置了一个二元模式搜索任务。我们必须在不使用任何库和内置函数(如 memmove 或 strstr)的情况下从字符串中删除子字符串。我们唯一的提示是它与“\0”有关。我不知道我们将如何实现这一点,因为我知道空字符只结束一个字符串而不是删除它。并且给定一个未知的输入,它变得更加难以解决。我需要有关使用空字符的帮助。编辑:哦,我们也不允许创建新数组。 EDIT2:如果您在这里寻求解决方案,则问题要复杂得多,请阅读此线程下的 cmets 以及标记的解决方案。
【问题讨论】:
-
提示仅在子字符串结束原始字符串时才有用。在这种情况下,您将使用
\0char 在子字符串之前结束原始字符串。 -
为了让这个问题更多地集中在你有问题的部分,请展示代码环境。 IE。为程序创建一个minimal reproducible example,该程序提供以适当方式处理的字符串,有一部分要通过删除实现进行扩展,最终可以输出删除的结果。
-
请注意,我不假设要删除的子字符串位于输入字符串的末尾。关于零的提示可能只是关于如何处理字符链以及如何在缩短字符串后结束字符串的提示,以避免在中重复最后一部分(删除字符串的长度)输出。如果您的作业中有任何内容支持子字符串位于末尾的假设,请纠正我。如果你能给出输入字符串和子字符串的例子,即使没有解释,它也会变得很明显。
-
@Yunnosch 是的,这是我们无法对子字符串的位置做出任何假设的棘手部分。此外,这个任务比仅仅删除一个子字符串要大得多。我们必须递归地执行它,直到我们搜索的每个子字符串模式都从给定的输入中消失。 IE。 “10011”如果我们从这个字符串中删除“01”,一个新的“01”将出现在剩余部分,我们也必须删除它。
-
您应该明确地 edit 在您的问题中提供有用的附加信息,因为例如现有答案表明,当前的询问方式很容易产生误导,并导致答案不正确。
标签: c arrays string null substring