检查一个字符串是否是另一个字符串的前缀

新手上路,请多包涵

我有两个要比较的字符串: StringString: 。是否有一个库函数在传递这两个字符串时会返回 true,但如果 StringOtherString 则返回 false?

准确地说,我想知道一个字符串是否是另一个字符串的前缀。

原文由 fredley 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

使用 std::mismatch 。将较短的字符串作为第一个迭代器范围传入,将较长的字符串作为第二个迭代器范围传入。返回的是一对迭代器,第一个是第一个范围内的迭代器,第二个是第二个范围内的迭代器。如果第一个是第一个范围的结尾,那么你知道短字符串是长字符串的前缀,例如

std::string foo("foo");
std::string foobar("foobar");

auto res = std::mismatch(foo.begin(), foo.end(), foobar.begin());

if (res.first == foo.end())
{
  // foo is a prefix of foobar.
}

原文由 Nim 发布,翻译遵循 CC BY-SA 3.0 许可协议

在 C++20 之后,我们可以使用 starts_with 来检查字符串是否以给定的前缀开头。

 str.starts_with(prefix)

另外,还有 ends_with 来检查后缀

原文由 RY_ Zheng 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题