интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
|
||||||
1 | ||||||
Функция size() стандартного класса string31.08.2012, 10:20. Показов 20570. Ответов 42
Метки нет (Все метки)
Добрый день. При поптыке посчитать количество символов в введённой строке на латыне - отображает верный результат, а кириллицу читает неправильно. Компилятор GNU C++. В чём может быть дело и как исправить эту ошибку?
Если ввести: Привет Мир! Результат будет 20
0
|
31.08.2012, 10:20 | |
Ответы с готовыми решениями:
42
Выход из цикла методом size() класса string Функция ввода для класса string std::string S.size() Приведение типов string.size() к (void*) |
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
||||||
02.09.2012, 09:47 | 41 | |||||
Юра, позволь я завершу ваш с Грызликом спор.
По неизвестной мне причине, кодпад автоматически сохраняет строку в мультибайте (русские символы там по два байта получаются как раз) и при компиляции так же использует мультибайт. Студия этого не делает (совершенно правильно поступает при этом). Если вручную повторить перевод юникодовской строки в мультибайт, то результат студии совпадает с кодпадом.
0
|
0 / 0 / 0
Регистрация: 18.08.2019
Сообщений: 2
|
|
14.01.2022, 20:42 | 42 |
Возможно будет не актуально,символы кириллицы находятся в unicode-таблице, и один символ из этой таблицы занимает 2 байта.Вот ссылка на статью, с картинками https://docs.microsoft.com/ru-... w=msvc-170
0
|
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
|
|
14.01.2022, 22:19 | 43 |
Излагаем еще проще. То что описывается в таблицах юникода, это code point-ы. То что у вас в string-ах лежит и подсчитывается методом size(), это code unit-ы. В зависимости от кодировки (utf-8/utf-16/-utf-32), одному код-поинту может соответствовать и один код-юнит, и три. И к исходному тексту эти код-юниты имеют примерно такое же отношение, как zip-архив к исходному файлу. А то что конечный пользователь называет "символом", это строго говоря grapheme cluster, который может собираться из неопределенного количества code point. Но в большинстве случаев все же состоит из одного код поинта. И те же регулярки существование этих самых кластеров обычно не учитывают.
0
|
14.01.2022, 22:19 | |
14.01.2022, 22:19 | |
Помогаю со студенческими работами здесь
43
Корректно ли? string nonVowel = new char[str.size()]; String.size() длина русского слова в 2 раза больше, чем английского override функции стандартного класса Создание класса на основе стандартного Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |