Ho una stringa di caratteri ampi (std :: wstring) nel mio codice, e ho bisogno di cercare caratteri ampi in esso.wstring :: find() non funziona con i simboli non latini?
Io uso la funzione find() per esso:
wcin >> str;
wcout << ((str.find(L'ф') != wstring::npos)? L"EXIST":L"NONE");
L'ф'
è una lettera cirillico.
Ma find() nella stessa chiamata restituisce sempre npos
. In un caso con lettere latine find() funziona correttamente.
Si tratta di un problema di questa funzione? Oppure faccio qualcosa in modo errato?
UPD
Io uso MinGW e risparmi Fonte in UTF-8. Ho anche impostato la locale con setlocale(LC_ALL, "");
. Codice stesso wcout << L'ф';
funziona in modo cooruito. Ma lo stesso
wchar_t w;
wcin >> w;
wcout << w;
non funziona correttamente.
È strano. In precedenza non ho avuto problemi con la codifica, usando setlocale().
Suppongo che questo non può essere fatto corretta direttamente e questa funzione tornerà utile: http://msdn.microsoft.com/en-us/library/windows/desktop/dd319072(v=vs.85).aspx – BlackCat
Perché? 'basic_string :: find()' funziona con chart, cioè per un caso di wstring - con un wcahr_t. "L'ф" è un wchar_t, non è vero? –