【发布时间】:2015-06-01 20:30:45
【问题描述】:
在 C 中,不是只跟踪字符串的长度,如果我们也跟踪它的方向呢?例如,如果str = "hello" 被布置在内存中(由 malloc 给出),我们会说它有一个正方向 (+1),因此将 +1 传递给函数参数。我们现在可以说rev = str[size - 1] 方向为-1,而不是用 O(n) 来反转这个字符串,因此它的处理方式不同。我意识到空终止可能会带来一些问题,但鉴于我们在内存中有字符串长度和起始字符,我们不需要关心空终止(如果我错了,请纠正我)。
如果字符串反转在程序中至关重要,这是一个可行的选择吗?有人可以给我一个为什么我不应该这样做的理由吗?有人听过或看过吗?
抱歉,如果我的格式关闭,这是我第一次发帖。提前致谢!
【问题讨论】:
-
不管你的方向标志是什么,任何库函数都可能会向前迭代字符串。
-
确实如此。在使用其他约定时,我确信不建议这样做,但如果从头开始构建某些东西,它可能是一个有趣的基础,不是吗?
-
有可能实现它,但你必须自己做。这是一个非常罕见的需求(反转字符串),因此您的解决方案(可行)不会在您的程序之外大量使用。
-
作为一个真正的好奇心,学术界之外的任务将字符串反转作为“程序中的关键”。
-
在
O(1)中完成刺痛反转的唯一方法是将其也反向存储。