比较 2 个 wchar_t 数组

Posted

技术标签:

【中文标题】比较 2 个 wchar_t 数组【英文标题】:Comparing 2 wchar_t arrays 【发布时间】:2011-12-01 12:00:53 【问题描述】:

我确信这很简单,但我来自 c# 背景,字符串很容易,现在我正在对非托管世界进行一次小旅行,我很困惑。

基本上我使用 EnumDisplayDevices 列出可用设备,我想针对特定适配器,因此我需要将 DeviceString 和 DeviceName 与一些已知值进行比较,以查看我是否有正确的适配器可以使用。

但我很难过,我这样定义了已知值...

wchar_t devName[] = L"Intel(R) HD Graphics Family";

但直接比较不起作用 - if(devName == theDisplay.DeviceName)

strcmp 似乎不适用于宽字符,所以我不知道该怎么做,请问有人知道该怎么做吗?

谢谢

【问题讨论】:

【参考方案1】:

使用std::wstring,它有一个operator==

【讨论】:

这对我有用,因此使用了 2 个 std::wstrings:if (devName.compare(dn) == 0) @john:你应该使用if (devName == dn) 当 OP 说“C# 中的字符串很简单”时,我不知道该笑还是该哭,然后您必须编写所有这些成员函数废话进行简单比较。据我所知,C++ 是为数不多的类 C 语言之一,您可以像理智的人一样将字符串与s1 == s2 进行比较。 你指的是什么成员函数的废话?通常在 c# 中,如果我想比较 2 个字符串,我会创建 2 个字符串并使用 strcmp,很简单。正如我在原始帖子中所说,s1 == s2 不适用于 wchar_t 数组。 @johnbowring:这是一个std::wstring。正如我之前所说。您可以使用if (s1 == s2) 来比较一对std::wstring,其中s1s2std::wstring。你很困惑,因为你正忙于让 C++ 看起来像 C#,你还没有学到一点关于 C++ 的知识。 C++ 101:使用标准字符串类满足所有字符串处理需求。【参考方案2】:

如果您查看 strcmp 的 Visual Studio 帮助,您会发现它列出了 3 个用于比较字符串的函数:strcmpwcscmp_mbscmp。你要找的是wcscmp

【讨论】:

以上是关于比较 2 个 wchar_t 数组的主要内容,如果未能解决你的问题,请参考以下文章

C++搞懂char与wchar_t字符串

wchar_t到QString的转换方法?

wchar_t类型的几个函数

如何将 char 数组转换为 wchar_t 数组?

win32控制台里 wchar_t字符串转成char数组!

CString 如何转为wchar_t