gpt4 book ai didi

c++ - 如何比较 std::string 和 char*?

转载 作者:行者123 更新时间:2023-11-28 03:52:14 27 4
gpt4 key购买 nike

我有什么:

  • [wstr1] 1 std::wstring 值(例如“(GMT+04:30) Kabul”)
  • [str2] 1 char* 填充与 std::wstring 相同的数据(具有相同的文本)

我只是想比较这两个值 - 但以下代码似乎不起作用。国民党。

这是从 char* 到 std::wstring 的转换器,

std::wstring TimeZone::TimeZone::char2ws(const char* src)
{
/* Convert to a wchar_t*
* http://msdn.microsoft.com/en-us/library/ms235631(v=vs.80).aspx
*/

// Convert to a wchar_t*
size_t origsize = strlen(src) + 1;
const size_t newsize = 512;
size_t convertedChars = 0;
wchar_t wcstring[newsize];
mbstowcs_s(&convertedChars, wcstring, origsize, src, _TRUNCATE);

return wcstring;
}

之后我做了简单的比较

// wstr1 is std::wstring, with "(GMT+04:30) Kabul" string
// wstr2 = char2ws(str2),
return (wstr1 == wstr2);

没有运气。 VSVC2008 IDE 调试器中的字符串在视觉上是相等的。

问题:为什么比较方法总是给我false

谢谢。


解决方案:非常感谢Alexandre C.

bool weirdEquals(const std::wstring& str, char const* c)
{
std::string c_str(c);
if (str.size() < c_str.size())
{
return false;
}
return std::equal(c_str.begin(), c_str.end(), str.begin());
}

附言。我做了一些改变。

最佳答案

这样比较,如果你确定你只有 ASCII 字符。否则,您可以将自定义(取决于区域设置?)比较器传递给 std::equal

bool weirdEquals(char const* c, size_t n, const std::wstring& str)
{
if (str.size() < n) return false;
return std::equal(c, c + n, str.begin());
}

关于c++ - 如何比较 std::string 和 char*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5068104/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com