【问题标题】:C++ std::find for strings ignoreres lower/upper case?C++ std::find 字符串忽略小写/大写?
【发布时间】:2020-07-20 09:16:26
【问题描述】:

我需要一个类来检查一个字符串是否包含在另一个中。我是否理解对字符串的 STL 函数 std::find 忽略大小写(这是我需要的)?

【问题讨论】:

  • 为什么你认为std::find 会不区分大小写?
  • 不,你理解错了。
  • 改用std::find_if 并提供一个函数来进行不区分大小写的比较。
  • 你的问题有点含糊,你到底想做什么?
  • 要使用@john 解决方案,此线程可能会帮助stackoverflow.com/q/36494584/6865932

标签: c++ oop stl


【解决方案1】:

find 搜索等于 value 的元素

std::string::find 遍历范围并将位置返回到满足条件的第一个元素或最后一个没有找到匹配项。

如果您将包含在较大字符串中的子字符串传递给 std::find 函数,算法应该返回子字符串开始的位置。

std::string::find 不区分大小写,它只是迭代容器并检查子字符串是否存在

【讨论】:

  • std::find 返回一个迭代器并在字符串中查找字符,而不是子字符串。也许你指的是std::string::find(但也没有返回指针)
  • 也不是返回最后一个元素的迭代器,但如果找不到元素,则返回最后一个元素的迭代器
  • 是的,它返回std::string::npos,是的,它是std::string::find @idclev463035818,谢谢指正。迭代器不只是指针的泛化吗?
  • vehicle 是汽车的概括,但飞机不是汽车 ;)
【解决方案2】:

std::string::find 不执行不区分大小写的搜索;它搜索完全匹配。您必须先将要搜索的字符串和搜索词转换为小写或大写,然后使用std::string::find

但是,您可以使用另一种方法来使用现代 C++(C++11 及更高版本):使用 std::regex_searchstd::regex_constants::icase 标志:

bool findCaseInsensitiveRegex(const std::string &completeString, const std::string &toSearch)
{
    std::regex pattern(toSearch, std::regex_constants::icase);
    return std::regex_search(completeString, pattern);
}

其中toSearch 是由要搜索的字符串组成的正则表达式,completeString 是要搜索的完整字符串。

两种方法的示例here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-29
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 2013-04-11
    • 2012-12-10
    • 1970-01-01
    相关资源
    最近更新 更多