Недавно я получил задание, требующее от меня сравнения слов. Я не хочу описывать его полностью, но мне приходится сравнивать слова по-характеру, чтобы увидеть, как похожи два слова.C++: Сравнение строк или wstrings со специальными символами в них (á, é, ő и т. Д.)
Теперь проблема заключается в том, что текст ввода, который я должен использовать, содержит много нестандартных символов, таких как á, é, ő и т. Д. Я попытался использовать строки, wstring, char и wchar_t для представления моих слов, но ничего похоже, работает правильно. Пример:
setlocale(LC_ALL, "");
std::vector <Word::Word> words;
std::wfstream fileWrite("testout.txt");
std::wstring s = words[0].getString();
fileWrite << s;
Наша строка содержит слово «Még» здесь. Он выводится правильно. Для записи все работает одинаково, если я использую строку вместо wstring. Следующие работы тоже:
const wchar_t* wc = s.c_str();
fileWrite << wc;
Но как только я пытаюсь ссылки на голец это дает мне бред. Пример:
fileWrite << wc[0] << " " << wc[1];
Этот выход «ď» ». Я предполагаю, что проблема заключается в том, что они используют несколько байтов для хранения символа? Я просто дико предполагаю здесь, но это было бы объяснить, почему
wcslen(wc);
возвращается 7.
Я попытался с помощью функции SubStr как с колонной и wstring, но, как правило, кажется, не работает. Кто-нибудь знает, как решить эту проблему? Я пропустил что-то очевидное здесь?
Кроме того, я использую кодовые блоки с gcc-компилятором, я его где-то читал, что он отлично справляется с wchar и wstring, может быть, проблема? Помните, я пробовал все выше со строкой вместо wstring, и это было то же самое.
Спасибо вам большое за помощь, было бы весьма полезно!
Какова кодировка ввода и кодировка вывода? – orlp
Честно говоря, я не уверен на 100%. Я получил txt-файл для работы, и я не знаю, как проверить кодировку этого. Однако я скопировал его на другой и использовал «Сохранить как ...», чтобы сохранить его с помощью UTF-8. Это должно означать, что кодировка UTF-8 и «оригинал» не имеет значения, не так ли? – akrammon
Назначение не определено, если кодирование неизвестно. После того, как вы знаете кодировку, вам нужно будет посмотреть в unicode. Это непростая задача. – orlp