Длина строки length()
Почему при применении метода length() к строке в C++ каждый символ из кириллицы считается как два символа? Результат, словно length() считает байты.
Кириллические символы в кодировке UTF-8 занимают как раз по 2 байта. Для подсчета предлагают использовать функцию mbstowcs вот тут https://stackoverflow.com/questions/5117393/utf-8-strings-length-in-linux-c
![]()
Кто сказал, что два символа? Это если UTF-16, то два, а если UTF-32, то четыре, а если UTF-8, то вообще переменное значение.
Найди там класс String, достаточно просто для понимания.
Всё ещё ищете ответ? Посмотрите другие вопросы с метками c++ или задайте свой вопрос.
Site design / logo © 2022 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2022.6.10.42345
Нажимая «Принять все файлы cookie», вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
String. Length Свойство
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает число знаков в текущем объекте String.
Значение свойства
Количество знаков в текущей строке.
Примеры
В следующем примере показано Length свойство.
Комментарии
Свойство Length возвращает количество Char объектов в этом экземпляре, а не количество символов Юникода. Причина заключается в том, что символ Юникода может быть представлен несколькими Charсимволами. System.Globalization.StringInfo Используйте класс для работы с каждым символом Юникода вместо каждого.Char
В некоторых языках, таких как C и C++, символ NULL указывает конец строки. В .NET в строку может быть внедрен пустой символ. Если строка содержит один или несколько пустых символов, они включаются в длину общей строки. Например, в следующей строке подстроки "abc" и "def" разделяются символом NULL. Свойство Length возвращает значение 7, указывающее, что он содержит шесть алфавитных символов, а также пустой символ.
Работа со строками
Довольно большое количество задач, которые могут встретиться при разработке приложений, так или иначе связано с обработкой строк — парсинг веб-страниц, поиск в тексте, какие-то аналитические задачи, связанные с извлечением нужной информации из текста и т.д. Поэтому в этом плане работе со строками уделяется особое внимание.
В языке C# строковые значения представляет тип string , а вся функциональность работы с данным типом сосредоточена в классе System.String . Собственно string является псевдонимом для класса String. Объекты этого класса представляют текст как последовательность символов Unicode. Максимальный размер объекта String может составлять в памяти 2 ГБ, или около 1 миллиарда символов.
Создание строк
Создавать строки можно, как используя переменную типа string и присваивая ей значение, так и применяя один из конструкторов класса String:
Конструктор String имеет различное число версий. Так, вызов конструктора
6 раз повторит объект из первого параметра, то есть фактически создаст строку «aaaaaa».
Еще один конструктор принимает массив символов, из которых создается строка
Третий использованный выше в примере конструктор позволяет создать строку из части массива символов. Второй параметр передает начальный индекс, с которого извлкаются символы, а третий параметр указывает на количество символов:
Строка как набор символов
Так как строка хранит коллекцию символов, в ней определен индексатор для доступа к этим символам:
Применяя индексатор, мы можем обратиться к строке как к массиву символов и получить по индексу любой из ее символов:
Используя свойство Length , как и в обычном массиве, можно получить длину строки.
Перебор строк
Класс String реализует интерфейс IEnumerable, благодаря чему строку можно перебрать в цикле foreach как набор объектов char. Также можно с помощью других типов циклов перебрать строку, применяя обращение к символам по индексу:
Сравнение строк
В отличие от других классов строки сравниваются по значению их символов, а не по ссылкам:
Основные методы строк
Основная функциональность класса String раскрывается через его методы, среди которых можно выделить следующие:
Compare : сравнивает две строки с учетом текущей культуры (локали) пользователя
CompareOrdinal : сравнивает две строки без учета локали
Contains : определяет, содержится ли подстрока в строке
Concat : соединяет строки
CopyTo : копирует часть строки, начиная с определенного индекса в массив
EndsWith : определяет, совпадает ли конец строки с подстрокой
Format : форматирует строку
IndexOf : находит индекс первого вхождения символа или подстроки в строке
Insert : вставляет в строку подстроку
Join : соединяет элементы массива строк
LastIndexOf : находит индекс последнего вхождения символа или подстроки в строке
Replace : замещает в строке символ или подстроку другим символом или подстрокой