как узнать длину строки
strlen
(PHP 4, PHP 5, PHP 7, PHP 8)
strlen — Возвращает длину строки
Описание
Список параметров
Строка ( string ), для которой измеряется длина.
Возвращаемые значения
Примеры
Пример #1 Пример использования strlen()
Примечания
Функция strlen() возвратит количество байт, а не число символов в строке.
Смотрите также
User Contributed Notes 8 notes
I want to share something seriously important for newbies or beginners of PHP who plays with strings of UTF8 encoded characters or the languages like: Arabic, Persian, Pashto, Dari, Chinese (simplified), Chinese (traditional), Japanese, Vietnamese, Urdu, Macedonian, Lithuanian, and etc.
As the manual says: «strlen() returns the number of bytes rather than the number of characters in a string.», so if you want to get the number of characters in a string of UTF8 so use mb_strlen() instead of strlen().
// the Arabic (Hello) string below is: 59 bytes and 32 characters
$utf8 = «السلام علیکم ورحمة الله وبرکاته!» ;
The easiest way to determine the character count of a UTF8 string is to pass the text through utf8_decode() first:
We just ran into what we thought was a bug but turned out to be a documented difference in behavior between PHP 5.2 & 5.3. Take the following code example:
?>
This is because in 5.2 strlen will automatically cast anything passed to it as a string, and casting an array to a string yields the string «Array». In 5.3, this changed, as noted in the following point in the backward incompatible changes in 5.3 (http://www.php.net/manual/en/migration53.incompatible.php):
«The newer internal parameter parsing API has been applied across all the extensions bundled with PHP 5.3.x. This parameter parsing API causes functions to return NULL when passed incompatible parameters. There are some exceptions to this rule, such as the get_class() function, which will continue to return FALSE on error.»
So, in PHP 5.3, strlen($attributes) returns NULL, while in PHP 5.2, strlen($attributes) returns the integer 5. This likely affects other functions, so if you are getting different behaviors or new bugs suddenly, check if you have upgraded to 5.3 (which we did recently), and then check for some warnings in your logs like this:
strlen() expects parameter 1 to be string, array given in /var/www/sis/lib/functions/advanced_search_lib.php on line 1028
If so, then you are likely experiencing this changed behavior.
When checking for length to make sure a value will fit in a database field, be mindful of using the right function.
There are three possible situations:
1. Most likely case: the database column is UTF-8 with a length defined in unicode code points (e.g. mysql varchar(200) for a utf-8 database).
Find the character set used, and pass it explicitly to the length function.
There’s a LOT of misinformation here, which I want to correct! Many people have warned against using strlen(), because it is «super slow». Well, that was probably true in old versions of PHP. But as of PHP7 that’s definitely no longer true. It’s now SUPER fast!
I created a 20,00,000 byte string (
20 megabytes), and iterated ONE HUNDRED MILLION TIMES in a loop. Every loop iteration did a new strlen() on that very, very long string.
The result: 100 million strlen() calls on a 20 megabyte string only took a total of 488 milliseconds. And the strlen() calls didn’t get slower/faster even if I made the string smaller or bigger. The strlen() was pretty much a constant-time, super-fast operation
So either PHP7 stores the length of every string as a field that it can simply always look up without having to count characters. Or it caches the result of strlen() until the string contents actually change. Either way, you should now never, EVER worry about strlen() performance again. As of PHP7, it is super fast!
Here is the complete benchmark code if you want to reproduce it on your machine:
Как узнать длину строки
На этом шаге мы приведем примеры использования строковых функций.
Определение длины строк.
В функцию strlen() можно передавать и другие виды строк. Например, вы можете определить и инициализировать символьный буфер следующим образом:
Копирование строк.
Аналогичная функция strncpy() ограничивает количество копируемых символов. Если источник ( source ) и приемник ( destination ) являются указателями типа char * или символьными массивами, то оператор
Дублирование строк.
Использование механизма дублирования строк разберем на конкретном примере: создадим функцию, которая выводила бы приглашение и возвращала строку, введенную с клавиатуры. Желательно, чтобы эта строка запоминалась в куче и она занимала бы ровно столько байтов, сколько требуется.
Сравнение строк.
Конкатенация строк.
При вызове функции strcat() убедитесь, что первый аргумент типа char * инициализирован и имеет достаточно места, чтобы запомнить результат. Если c1 адресует строку, которая уже заполнена, а c2 адресует ненулевую строку, оператор strcat(c1, c2); перезапишет конец строки, вызвав серьезную ошибку.
Функция strcat() возвращает адрес результирующей строки (совпадающий с ее первым параметром) и может использоваться как каскад нескольких вызовов функций:
Пример 5 показывает, как можно использовать функцию strcat() для получения в одной строке фамилии, имени и отчества, хранящихся отдельно, например, в виде полей базы данных. Введите фамилию, имя и отчество. Программа сцепит введенные вами строки и отобразит их как отдельную строку.
Если вы не уверены, что в s1 достаточно места, чтобы запомнить результат, используйте альтернативный оператор:
На следующем шаге мы продолжим изучение использования строковых функций.
Четыре способа найти длину строки в Python
В некоторых случаях при работе со строками в Python нам необходимо определить длину строки. Сделать это можно несколькими способами, а какими — мы сейчас и узнаем.
Итак, в языке программирования Python строки относят к категории неизменяемых последовательностей, что необходимо помнить при вызове методов и функций. Теперь давайте представим, что у нас есть строка, и нам требуется найти её длину:
Сделать это можно несколькими способами.
Определяем длину строки в Python: способ № 1
Итогом работы функции станет следующий вывод в терминал:
Ищем длину строки в «Питоне»: способ № 2
Чтобы подсчитать количество символов в строке Python, мы можем воспользоваться циклом for и счётчиком. Тут тоже всё просто, т. к. определение длины происходит путём подсчёта числа итераций.
Соответственно, наш вывод в консоли тоже будет равен 4.
Поиск длины строки в Python: способ № 3
Теперь давайте воспользуемся циклом while. Мы «нарежем» строку, укорачивая её на каждой итерации, в результате чего получим пустую строку и остановку цикла. А подсчёт количества итераций снова позволит нам вывести в терминал искомую длину.
Находим длину строки в Python: способ № 4
Теперь воспользуемся строковым методом объединения. Он принимает итеративный элемент, возвращая строку, являющуюся объединением строк в итерируемом нами элементе. Разделитель между элементами — исходная строка, для которой и вызывается метод. Применение метода объединения с последующим подсчётом объединённой строки в исходной строке тоже позволит нам получить длину строки на «Питоне».
Как и во всех примерах выше, в консоль выведется количество символов в строе ‘otus’, равное 4. Вот и всё!
Хотите знать про Python гораздо больше? Записывайтесь на наш курс для продвинутых разработчиков:
Строки в языке C++ (класс string)
В языке C++ для удобной работы со строками есть класс string, для использования которого необходимо подключить заголовочный файл string.
Строки можно объявлять и одновременно присваивать им значения:
string S1, S2 = «Hello»;
Строка S1 будет пустой, строка S2 будет состоять из 5 символов.
Строки в языке C++ могут
Конструкторы строк
Конструкторы можно вызывать явно, например, так:
Неявно конструктор вызывается при объявлении строки с указанием дополнительных параметров. Например, так:
Подробней о конструкторах для строк читайте здесь.
Ввод-вывод строк
Строка выводится точно так же, как и числовые значения:
cout >» для объекта cin:
Можно считывать строки до появления символа конца строки при помощи функции getline. Сам символ конца строки считывается из входного потока, но к строке не добавляется:
Арифметические операторы
Подробней о методе resize.
clear
Подробней о методе clear.
empty
Подробней о методе empty.
push_back
Подробней о методе push_back.
append
Добавляет в конец строки несколько символов, другую строку или фрагмент другой строки. Имеет много способов вызова.
Подробней о методе append.
erase
Подробней о методе erase.
insert
Подробней о методе insert.
substr
Подробней о методе substr.
replace
Заменяет фрагмент строки на несколько равных символов, другую строку или фрагмент другой строки. Способы вызова аналогичны способам вызова метода append, только первыми двумя параметрами являются два числа: pos и count. Из данной строки удаляется count символов, начиная с символа pos, и на их место вставляются новые символы.
Подробней о методе replace.
Подробней о методе find.
rfind
Ищет последнее вхождение подстроки («правый» поиск). Способы вызова аналогичны способам вызова метода find.
Подробней о методе rfind.
find_first_of
Ищет в данной строке первое появление любого из символов данной строки str. Возвращается номер этого символа или значение string::npos.
find_last_of
Ищет в данной строке последнее появление любого из символов данной строки str. Способы вызова и возвращаемое значение аналогичны методу find_first_of.
Подробней о методе find_last_of.
find_first_not_of
Ищет в данной строке первое появление символа, отличного от символов строки str. Способы вызова и возвращаемое значение аналогичны методу find_first_of.
find_last_not_of
Ищет в данной строке последнее появление символа, отличного от символов строки str. Способы вызова и возвращаемое значение аналогичны методу find_first_of.
c_str
Возвращает указать на область памяти, в которой хранятся символы строки, возвращает значение типа char*. Возвращаемое значение можно рассматривать как C-строку и использовать в функциях, которые должны получать на вход C-строку.
Вычисление длины строки
Используйте бесплатный онлайн инструмент для мгновенного вычисления длины строки. Напечатайте или вставьте текст в область ввода. Нажав на кнопку “Готово”, инструмент отобразит количество символов и пробелов в тексте.
Что такое строковая функция?
В языках программирования строковые функции используются, чтобы управлять строкой или сделать запрос информации касательно строки. Простым примером строковой функции является функция длины. Например, length(«hello world») возвращает 11.
Большинство языков программирования, которые имеют строковый тип данных, имеют некоторые строковые функции. В каждом языке могут быть и другие низкоуровневые способы, которые непосредственно обрабатывают строку. В объектно-ориентированных языках программирования строковые функции часто реализовываются в виде свойств и методов строковых объектов. В функциональных и списочных языках строка представляется в виде списка, и поэтому все процессы управления списками могут считаться строковыми функциями. Но такие языки могут также выполнять подмножество специфических строковых функций.
Современные объектно-ориентированные языки программирования (например, C# и Java) имеют неизменяемые строки и возвращают копию (в новом динамическом выделении памяти ) для функции, которая управляет строками, в то время как другие языки (например, C) управляют исходной строкой, если программист не копирует данные в новую строку.
Что такое строка?
Строка считается типом данных и часто реализовывается как структура байтов или слов данных массива, которая сохраняет последовательность элементов (обычно символов), используя кодирование символов. Строка может также указать более универсальные массивы или другие типы и структуры последовательности (списка) данных.
Когда строка находится в исходном коде, она называется строковый литерал или анонимная строка.
Строка является конечной последовательностью символов, выбранных из набора, который в формальных языках называется алфавитом.
Формальные строки могут иметь произвольную, но конечную длину. Но длина строк в реальных языках часто ограничивается искусственным максимумом. Существует два вида строковых типов данных: строки постоянной длины (fixed-length strings) и строки переменной длины (variable-length strings). Строки постоянной длины имеют фиксированную максимальную длину, которая должна быть определена во время компиляции, и используют одинаковый объем памяти, вне зависимости от того, нужен этот максимум или нет. Длина строки переменной длины не является произвольно фиксированной, и может использоваться различный объем памяти, в зависимости от фактических требований во время выполнения. В современных языках программирования большинство строк имеют переменную длину. Но даже строки переменной длины ограничены в длине. Длина строки может храниться в виде отдельного целого числа, которое может ставить искусственное ограничение длины, или в неявном виде с помощью символа завершения (обычно знаковое значение с нулевыми битами, например, в языке программирования C).
Некоторые языки, например, C++ и Ruby обычно позволяют выполнить изменения в содержании строки после его создания. Такие строки называются изменяемыми. В таких языках, как Java и Python, при необходимости изменений значение фиксируется и создается новая строка. Эти строки называются неизменяемыми.
Проблемы безопасности
Различающиеся структуры памяти и требуемый объем памяти строки могут повлиять на безопасность программы, предоставляющий доступ строковым данным. Строковые данные часто могут быть получены через ввод информации пользователем. Подтверждение правильности строки является “обязанностью” программы. Выполнение ограниченной проверки или не выполнение проверки ввода информации пользователем может сделать программы уязвимыми к нарушениям внедрения кода.