std::wstring::length()
даст вам количество символов, где характера определяются как атомарная единицы wstring
объекта, т.е. wchar
. Это означает, что Стандарт означает, что он относится к characters
(см. this post для получения более подробной информации об использовании слова в стандарте).
Однако, если речь идет о символах Юникода, то один символ wchar
соответствует одному символу Юникода, зависит от кодировки, используемой внутри wstring
. Если используется UTF-16, который часто (но не обязательно) случай, один wchar
будет соответствовать одному символу Юникода только для базовой многоязычной плоскости (т.е. все наборы символов, полученные из ISO-8859, а также большинство широко используемых CJK, но не некоторые из более экзотических (например, классических китайских) персонажей) (*). Если вы хотите, чтобы число символов было правильно для , все символы Unicode в этом случае вам нужно использовать библиотеку, совместимую с Unicode (например, ICU), или запрограммировать ее самостоятельно.
(*) Есть дополнительные проблемы, если объединяющие символы используются как @ 一 二三 указывает правильно. Считать их правильно также лучше всего, используя соответствующие библиотеки.
http://en.cppreference.com/w/cpp/string/basic_string/size: возвращает количество символов в строке – billz
См. Этот вопрос: http://stackoverflow.com/questions/4183736/stdwstring- length –
"* Использование' myStr.length() 'дает размер байта (я думаю), но это не количество символов. *« Почему вы так думаете? – ildjarn