Mam ciąg znaków o szerokim spektrum (std :: wstring) w moim kodzie i muszę przeszukiwać w nim szeroki znak.wstring :: find() nie działa z symbolami innymi niż łacińskie?
używam find() funkcji do niego:
wcin >> str;
wcout << ((str.find(L'ф') != wstring::npos)? L"EXIST":L"NONE");
L'ф'
jest cyrylica list.
Ale find() w tym samym wywołaniu zawsze zwraca npos
. W przypadku liter łacińskich find() działa poprawnie.
Czy to jest problem tej funkcji? Czy źle coś zrobiłem?
UPD
używam MinGW i zapisać źródła w UTF-8. Ustawiam również ustawienia regionalne z setlocale(LC_ALL, "");
. Kod ten sam wcout << L'ф';
działa współdziałająco. Ale ten sam
wchar_t w;
wcin >> w;
wcout << w;
działa niepoprawnie.
To dziwne. Wcześniej nie miałem problemów z kodowaniem, używając setlocale().
przypuszczam, że tego nie da się bezpośrednio zrobić poprawny i ta funkcja będzie przydatna: http://msdn.microsoft.com/en-us/library/windows/desktop/dd319072(v=vs.85).aspx – BlackCat
Dlaczego? 'basic_string :: find()' działa z charT, to jest dla przypadku wstringa - z wcahr_t. "L'ф" to wchar_t, czyż nie? –