|
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
|
||||||
Функция size() стандартного класса string31.08.2012, 10:20. Показов 22868. Ответов 42
Метки нет (Все метки)
Добрый день. При поптыке посчитать количество символов в введённой строке на латыне - отображает верный результат, а кириллицу читает неправильно. Компилятор GNU C++. В чём может быть дело и как исправить эту ошибку?
Если ввести: Привет Мир! Результат будет 20
0
|
||||||
| 31.08.2012, 10:20 | |
|
Ответы с готовыми решениями:
42
Выход из цикла методом size() класса string Функция ввода для класса string
|
|
|
|
| 01.09.2012, 11:51 | |
|
grizlik78, почитай вики на счет переменого размера вчар,а также вспони зачем для структур используют прагма пак(это я к тому что пробел и знак восклицания идя в юникодной строке влезли в 2 байта вместо 4-х).И да если не вчар использовался для юникода,то какой-такой тип,ммм???)))Ответ обязателен!
0
|
|
|
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
|
| 01.09.2012, 11:58 | |
|
Не путай тип переменной (char, wchar_t), набор символов Unicode и кодировку символов (CP1251, UTF-8, USC2, UTF-16LE и т. д., тысячи их).
В твоём примере используется тип char, набор символов Unicode и кодировка UTF-8. В пределах одного компилятора размер wchar_t не меняется. Он может измениться только при смене платформы (компилятор или ОС).
0
|
|
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
| 01.09.2012, 12:54 | |
|
codepad
0
|
|
|
|
||
| 01.09.2012, 14:12 | ||
|
http://codepad.org/XDTlhPh9 Внизу скрин этого же для студии. Размер чара увидел? (1 при юникоде). Ты говоришь, что чар в гну при юникоде 2 байта ну так ведь? Я даже далее пошёл - вывел в sizeof(line[0]) http://codepad.org/MD58BonG ОПА ДА?=) Теперь давай мне ответь, почему при включенном юникоде, что окна что гну кодпада показывает чар 1 байт?Ну давай раз уж завелись найдём истину! Жду пояснений... Не по теме:
1
|
||
|
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
||
| 01.09.2012, 16:33 | ||
|
А вот представление строки текста в памяти зависит от кодировки. При использовании UTF-8 один кириллический символ представляется двумя элементами типа char, то есть двумя байтами. Латинские символы при этом помещаются в одном char. При использовании же wchar_t и те и другие занимают в линуксе 4 байта (но один элемент массива), поскольку там используется UTF-32 (или UCS-4). В Windows размер wchar_t имеет размер 2 байта и поэтому там используется UTF-16, при этом и латинские и кириллические символы занимают по 2 байта (но по прежнему это один элемент wchar_t). И только некоторые из символов Unicode представляются суррогатными парами, то есть по 2 элемента wchar_t. Макрос UNICODE ко всему этому отношения не имеет.
0
|
||
|
|
||
| 01.09.2012, 16:49 | ||
|
grizlik78, тогда объясни как хранилось Привет мир! std::string которая являет собой char - овский контейнер и как объяснишь тот факт что П line[0] занимало 1 байт?
0
|
||
|
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
||
| 01.09.2012, 18:26 | ||
|
http://codepad.org/So2S3hNv
0
|
||
|
|
|
| 01.09.2012, 19:32 | |
|
grizlik78, подогоди,пару постов назад ты сказал, что гну использовал юникод в котором размер чара равен 2 байта, а теперь пишешь, что в стринге чары по 1 байт. Попахивает твоим фэйлом, не находишь?
0
|
|
|
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
|
| 01.09.2012, 19:34 | |
|
0
|
|
|
|
|||||
| 01.09.2012, 20:19 | |||||
![]() ![]() Функция size() стандартного класса string
0
|
|||||
|
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
|
| 01.09.2012, 20:22 | |
|
Твои личные заблуждения меня не беспокоят. Это твои проблемы. Мне не нравится лишь то, что ты навязываешь свои заблуждения другим.
Я попросил цитату, где я говорил, что размер чар 2 байта.
0
|
|
|
|
|||
| 01.09.2012, 20:28 | |||
|
Не по теме: Твои логические выкладки мне тоже как бы к 5-й точке;) Добавлено через 2 минуты Итак grizlik78, отделяем мух от котлет : Как ты сказал в нашей строке "Привет мир!" переменная длинна символов, какой тип говоришь там использован, а то как то ты начинаешь выворачивать и туда и сюда, итак какой тип использовался в примере ТС?Пишем пишем
0
|
|||
|
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
||
| 01.09.2012, 20:35 | ||
|
В твоём стринге было 20 чаров размером по 1 байту каждый. Что непонятно? Девять букв занимали 18 чаров, плюс по одному чару на пробел и восклицательный знак.
Добавлено через 6 минут
0
|
||
|
|
||||||||
| 01.09.2012, 20:37 | ||||||||
|
Т.е. вот так http://codepad.org/MdBrR4cj
Отработка
0
|
||||||||
|
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
|
| 01.09.2012, 20:43 | |
|
Ну, попробую ещё раз. В линуксе (на котором codepad и liveworkspace) для представления символов, чаще всего, используется кодировка UTF-8. Эта кодировка разные буквы кодирует разным количеством байтов. А уже эти байты составляют строку в виде последовательности чаров, при этом на одну букву может требоваться и 2 и 3 и даже 4 байта, то есть буква может занимать от одного до 4 чаров. В Windows в консоли традиционно используются однобайтовые кодировки, в которых одна буква — один чар. Поэтому число чаров, которое выдаёт string.size(), может совпадать, а может и не совпадать с количеством букв. Здесь под буквами я подразумеваю и знаки препинания, и другие символы, просто чтобы не путать с char.
0
|
|
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||
| 01.09.2012, 21:09 | ||
|
0
|
||
|
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
|
| 01.09.2012, 21:13 | |
|
1
|
|
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
| 01.09.2012, 21:18 | |
|
Ещё вопрос. Что за размер самого объекта string выдаёт codepad: 4 (sizeof(string), sizeof(wstring))? MSVC и mingv выдают 32.
0
|
|
|
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
||
| 01.09.2012, 21:35 | ||
|
Добавлено через 13 минут Посмотрел. В общем-то pimpl там нет, но из не статических членов-данных там действительно хранится только указатель на структуру, с наследованием от аллокатора. В других реализациях, очевидно, в самом классе хранятся какие-то другие данные. Это внутреннее дело этих реализаций.
1
|
||
| 01.09.2012, 21:35 | |
|
Приведение типов string.size() к (void*) Корректно ли? string nonVowel = new char[str.size()]; String.size() длина русского слова в 2 раза больше, чем английского override функции стандартного класса
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Книги по геймдизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|