【问题标题】:Is it possible to have string functions (such as strstr ) consider an array from end towards beginning in C++?是否可以让字符串函数(例如 strstr )在 C++ 中从头到尾考虑数组?
【发布时间】:2019-05-10 14:49:54
【问题描述】:

我想知道 C++ 中的某些函数是否可以“反向”工作。反向我的意思是:与它们通常“遍历”数组的方式相反。例如,我知道 strchr 返回指向数组中给定字符第一次出现的指针,而 strRchr 返回数组中给定字符的最后一次出现。 strtok、strstr 和其他任何人都具有相同的能力吗?我相信这样的选择会非常有用,例如:当试图找到最大的回文时; (不确定这是一个适当的例子......)

【问题讨论】:

  • 你刚才提到的所有函数都来自C标准库。
  • C++ <algorithms> 库可以轻松地反向处理范围(或至少以合理方式可逆的范围)。但是,您正在谈论的 C - 而不是 C++ - 库并不是那么灵活。
  • 那么你想“反转” C 或 C++ 函数吗?
  • @Borgleader 他们都在 C++ 中。
  • 谢谢!我真的很感激。

标签: c++ c arrays string


【解决方案1】:

不,但您可以先对数组执行原位 reverse(),然后应用您想要的函数。

http://www.cplusplus.com/reference/algorithm/reverse/

【讨论】:

    【解决方案2】:

    不是真的,不。

    旧的 C 函数采用“开始指针”,并且大多数进程向前,直到遇到空终止符。这是固定的行为。

    如果幸运的话,它们会采用“起始指针”和长度,这在某些方面会更好,但也要求进行前向遍历,除非该函数专门编写为不这样做。

    幸运的是,C++ 更现代的算法采用 iterator 对来指定范围,这开辟了一些机会。真正的魔力在于存在“反向迭代器”,可以是++'d 但实际上会倒退到一个范围内(这是没有指针类别知道如何做的事情)。通常允许您将反向迭代器传递给标准算法以获得您想要的行为;这一切都是刻意抽象的。

    我建议阅读 C++ 的算法,并放弃旧的 C 技术。尽管 C 程序员肯定仍然存在(并且 C 应用程序仍然存在,有充分的理由),但我们其他人很久以前就摆脱了这些限制。 ;)

    【讨论】:

      猜你喜欢
      • 2012-11-09
      • 2021-10-21
      • 2021-08-25
      • 2022-01-25
      • 1970-01-01
      • 2017-05-07
      • 2011-06-06
      • 2021-08-08
      • 2021-11-06
      相关资源
      最近更新 更多