Haikson

[ Everything is possible. Everything takes time. ]

Определение длины строки C++

Задача определения длины строки ( в этой статье под понятием строки  мы подразумеваем массив символов char * ) в C++ решается достаточно просто:
#include <stdio.h>
#include <string.h>
using namespace std;
int main(){
    char str[100];
    printf("Enter some string: ");
    // Read string
    scanf("%99s", str);
    printf("Length of string str is %lu\n", strlen(str));
    return 0;
}
Это относительно простой способ вычисления длины строки. Но эта статья не для того пишется, чтобы рассказать о замечательной функции strlen(), а для того, чтобы объяснить как вычислить длину строки, не прибегая к ней и не подключая заголовочный файл string.h Вся сложность работы со строками в C++  заключается в основном в понимании самой сути: что такое строки? А ведь это всего лишь массив символов. !!! МАССИВ !!! Вот и для решения задач со строками нужно подходить к ним как к массивам. Но при этом запомним, что у данных типов массивов есть свои особенности. Одна из них понадобится нам в этом примере: Любая строка всегда заканчивается нулевым символом "\0". Этот закон облегчит нам задачу сегодня. Итак: вычисление длины строки. Во-первых задав строку, мы должны определить максимальную длину строки. Допустим номер телефона может содержать максимум 16 символов (+7 495 ххх хх хх). Т.е. мы имеем
char phone[16];
Но вот она - первая ошибка! Всегда нужно учитывать нулевой символ в конце каждой строки. Поэтому правильно будет задать длину массива 17 символов:
char phone[17];
С этим разобрались. Теперь легко решается задача вычисления длины строки. Если бы всегда строка заполняла весь массив, то мы бы не читали этот длинный нудный пост. Но чаще всего это не так. Мы привыкли задавать переменную для внесения имени char name[100]. Я даже представить не могу имя, длиною в 99 символов. Для моего имени достаточно было бы массива с 5 элементами. Поэтому вычисление длины строки должно сводиться к вычислению количества заполненных элементов массива символов. Но и тут возникает проблема: после того, как вы введете свое имя, программа автоматически поставит после последнего символа имени нулевой символ и оставшиеся элементы массива заполнит черт знает чем. Это зависит от компилятора, ОС, архитектуры... Да кто бы знал от чего это зависит? Именно поэтому задача не в вычислении количества заполненных элементов массива, а в поиске нулевого символа. Именно здесь мы и понимаем насколько он важен. А чем? Тем, что индекс нулевого символа в массиве - это и есть длина строки. Убедимся:

Всё оказалось проще простого. Удачного вам дня.