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++. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x