C++
Length в C++: длина строки, vector, массива и C-строки
В C++ length чаще всего встречается у std::string и означает длину строки. Но в разных типах данных длину или размер получают по-разному:
- у
std::stringесть.length()и.size(); - у
std::vectorесть.size(); - у обычного массива можно использовать
std::sizeв C++17; - у C-строки используют
std::strlen.
Главное правило: сначала определите тип переменной, потом выбирайте способ узнать длину
length для std::string
Пример:
#include <iostream>
#include <string>
int main() {
std::string text = "hello";
std::cout << text.length() << "\n";
return 0;
}
Вывод:
5
Для std::string методы .length() и .size() возвращают одно и то же значение:
std::cout << text.length() << "\n";
std::cout << text.size() << "\n";
Оба варианта нормальные. В коде со строками часто пишут length, потому что слово явно говорит о длине текста. В коде с контейнерами чаще используют size
Как использовать length в условии
Частый практический сценарий — проверить, что пользователь ввел не пустую строку или что пароль достаточно длинный
#include <iostream>
#include <string>
int main() {
std::string password;
std::cout << "Введите пароль: ";
std::getline(std::cin, password);
if (password.length() < 8) {
std::cout << "Пароль слишком короткий\n";
} else {
std::cout << "Длина подходит\n";
}
return 0;
}
Метод length() возвращает беззнаковое целое значение типа std::size_t. Для простых проверок это не мешает, но в более строгом коде не стоит бездумно сравнивать его с отрицательными числами
Длина строки с русскими буквами
Нужно помнить: std::string::length() считает байты, а не «буквы в человеческом смысле»
#include <iostream>
#include <string>
int main() {
std::string text = "привет";
std::cout << text.length() << "\n";
return 0;
}
В UTF-8 результат может быть не 6, потому что русская буква занимает больше одного байта. Для учебных задач с английскими символами это обычно не мешает. Для полноценной работы с Unicode нужны отдельные подходы и библиотеки
Размер vector
У std::vector нет метода .length(). Для него используют .size():
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers = {10, 20, 30};
std::cout << numbers.size() << "\n";
return 0;
}
Вывод:
3
Если написать numbers.length(), будет ошибка компиляции
Длина обычного массива
Для обычного массива в C++17 удобно использовать std::size:
#include <iostream>
#include <iterator>
int main() {
int numbers[] = {10, 20, 30, 40};
std::cout << std::size(numbers) << "\n";
return 0;
}
Вывод:
4
Если C++17 недоступен, часто встречается старый прием:
int count = sizeof(numbers) / sizeof(numbers[0]);
Он работает только там, где numbers действительно массив, а не указатель
strlen для C-строк
Если строка записана как массив символов с нулевым символом в конце, можно использовать std::strlen:
#include <cstring>
#include <iostream>
int main() {
const char* text = "hello";
std::cout << std::strlen(text) << "\n";
return 0;
}
Для std::string обычно не нужен strlen. Пишите:
text.length()
или:
text.size()
Частые ошибки
Использовать length у vector
Неправильно:
numbers.length();
Правильно:
numbers.size();
Использовать strlen для std::string
Так можно сделать через c_str(), но обычно это лишнее:
std::strlen(text.c_str());
Лучше:
text.length();
Считать, что length всегда считает буквы
Для std::string это размер строки в элементах ее внутреннего представления. В UTF-8 это может отличаться от количества видимых символов
Короткий вывод
length в C++ обычно нужен для std::string. Для строки можно использовать .length() или .size(). Для std::vector используйте .size(), для массива — std::size, для C-строки — std::strlen
Связанные материалы:
Что почитать дальше по C++
Если нужен общий маршрут по теме, откройте рубрику C++. Для соседних задач пригодятся эти разборы:
- Сортировка массива в C++: std::sort, обычный массив и vector
- Enter в C++: перенос строки, std::endl и ввод через cin
- std::generate в C++: как заполнить vector и массив
- Как отделить буквы от цифр в C++: isalpha, isdigit и две строки