首页 > 解决方案 > C++ 字符串使用 std lib 中的 find_first_of 函数检查子字符串

问题描述

我想使用find_first_ofC++ lib 中的函数来检查字符串是否包含某个子字符串,结果与我预期的不太一样。

我有如下代码

const std::wstring_view expected{ L"abc-1" };

const std::wstring_view result = GetResult(); // result = L"abc-2-1" from function return 

if (result.find_first_of(expected) == 0) {
    .....
}

当我调试它时,代码运行到 if 范围,这意味着它从位置“0”找到了匹配的子字符串。这是这个api预期的工作方式吗?我想我可能在这里遗漏了一些东西。

标签: c++stringsubstring

解决方案


std::basic_string_view::find_first_of返回字符串中任何字符第一次出现的位置(或者std::basic_string_view::npos如果没有找到)。

换句话说,它给出了第一个'a''b''c''-''2'或的位置'1'

用于std::basic_string_view::find获取第一个完整子字符串的位置。

if (result.find(expected) == 0) {
  // ...
}

推荐阅读