首页 > 解决方案 > C++ 在 std:wstring 中找到 std:string

问题描述

std::string targetDevice = "c53b1f8";
std::wstring devname;
VARIANT var;
var.vt = VT_BSTR;
pPropertyBag->Read(L"DevicePath", &var, 0);
devname = var.bstrVal;
VariantClear(&var);

if (devname.find(targetDevice) != std::string::npos) //<< my problem
{
...
}

在 devname 中查找 targetDevice 的正确语法是什么?

标签: c++

解决方案


问题是不同的字符大小意味着不同的字符编码。更糟糕wchar_t的大小取决于平台。

但假设您只对 ASCII 字符感兴趣并且大多数编码与 ASCII 兼容,您可以使用 STL 算法进行检查:

template <typename A, typename B>
bool contains(const A& a, const B& b)
{
     return std::search(std::begin(a), std::end(a), 
                        std::begin(b), std::end(b)) != std::end(a);
}

https://godbolt.org/z/x4bajr


您应该编辑您的问题并提供更多上下文为什么您需要此功能,因为我怀疑有更好的方法来解决您的实际问题。

推荐阅读