c - 在不使用 C 中任何库的情况下从 char 数组中删除子字符串

标签 c arrays string null substring

我是计算机科学一年级的学生,我们的老师布置了一个二进制模式搜索任务。我们必须从字符串中删除子字符串,而不使用任何库和内置函数(例如 memmove 或 strstr)。我们唯一的提示是它与 '\0' 有关。我不知道我们将如何实现这一目标,因为据我所知,空字符仅结束字符串而不删除它。考虑到未知的输入,绕过就变得更加困难。我需要有关空字符使用的帮助。编辑:哦,我们也不允许创建新的数组。 EDIT2:如果您在这里寻求解决方案并阅读此线程下的评论以及标记的解决方案,那么问题会更加复杂。

最佳答案

C 字符串是“空终止”的,这意味着只要出现空值(在 C 中写为 '\0'),它们就被视为结束。

如果我从字符串“Stack Overflow”开始,并用 '\0' 覆盖空格,我现在就得到了字符串“Stack”。 “Overflow”的存储仍然存在,但根据 strlen()printf() 等 C 函数,它不是字符串的一部分。事实上,如果我持有一个指向原始字符串的“O”部分的指针,就好像有两个字符串:“Stack”和“Overflow”,并且您仍然可以使用它们。

这就好像我来到你住的地方,在你家门前的马路上建了一堵巨大的墙。路现在缩短了,我这边的人不会知道你在那里。

关于c - 在不使用 C 中任何库的情况下从 char 数组中删除子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60238670/

相关文章:

c - typedef 中的动态二维数组

java - Groovy:有没有办法将所有出现的字符串作为整数偏移列表返回?

java - 如何用char类型的单个字符替换字符串中的某些字符?

c++ - 如何传递二维结构数组给函数?

c - 将整数存储在 char 数组中

string - [..] 对 Rust 切片意味着什么,它叫什么?

c - 禁用系统 header 的某些警告

c - 如何包含 linux/getcpu.h 等 Linux 头文件?

c++ - 赋值运算符不是序列点的任何充分理由?

c++ - 在 C/C++ 中获取文件大小的可移植方法