Как найти место в японской строке в C ++?

Я работаю над программой автокоррекции для японских предложений, и отсутствующий символ в предложении будет представлен в виде пробела.

Я читаю из 2 файлов …

Входной файл:

 はアビガイル
おはよう くん

Файл словаря:

私はアビガイル
おはよう花くん

Недостающие символы 私 и 花 представлены пробелом

Как мне найти место из входного файла?

Я старался lineFromFile.find(" ") но он возвращает мусор, так как это не обычные английские символы. Также попробовал lineFromFile.find('\0x20') а также lineFromFile.find(' ')

Я тоже пробовал string lineFromFile = u8"あび" но префикс u8 получает ошибку «идентификатор ‘u8’ не определен»

я использую C ++, Visual Studio 2013, gcc 4.8.3 и моя текущая кодовая страница — Unicode (UTF-8 с подписью)

Если вы считаете, что это дублирующий вопрос, пожалуйста, прокомментируйте ссылку на тот же ОТВЕТНЫЙ вопрос

Мой план:

  1. Найдите пробел в строке входного файла (верните spaceIndex)
  2. Сохраните строку из файла словаря в string temp
  3. Заменить персонажа в spaceIndex в переменной temp будет
  4. Сравните строку из входного файла с temp
  5. Повторяйте до тех пор, пока совпадение не будет найдено или пока не будет найден файл словаря.

Пожалуйста, помогите, у меня есть 3 дня: ‘(

0

Решение

Недостающие символы 私 и 花 представлены пробелом

Нет, это не так. Смотря на  はアビガイル в шестнадцатеричном редакторе показывает, что первый символ '\u3000' который ИДЕОГРАФИЧЕСКОЕ ПРОСТРАНСТВО не ПРОСТРАНСТВО.

Так что, чтобы найти его, вам нужно использовать find(u8"\u3000") или же find("\xe3\x80\x80)

Если вам повезло, и все японские символы во ваших входных файлах кодируются как три байта в UTF-8, тогда вы можете рассматривать их как наличие фиксированных позиций в строках и заменять блоки из трех байтов из одной строки в другую.

1

Другие решения