Что у меня есть:
- [wstr1] 1 std :: wstring значение (например, "(GMT + 04: 30) Кабул")
- [str2] 1 char * заполнен теми же данными, что и std :: wstring (с тем же текстом)
Я просто пытаюсь сравнить эти два значения - носледующий код не работаетKMP.
Вот конвертер из 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());
}
PS.Я сделал некоторые изменения.