Этот код показывает две разные реализации функции strlen на C++: одна использует индексирование массива, а другая — арифметику указателей. Оба подхода считают длину строки, подсчитывая символы до нулевого терминатора ('\0').
Функция strlen1 использует традиционную итерацию по индексам:
int strlen1( const char str[ ] ) {
int i;
for( i = 0; str[ i ] != '\0'; i++ ) ;
return i;
}
Этот способ ведёт счётчик i, который увеличивается с каждой итерацией цикла. Функция возвращает результат, когда встречает нулевой терминатор — простой и понятный подход.
Функция strlen2 использует арифметику указателей для более прямолинейного решения:
int strlen2( const char *str ) {
const char *sp = str;
while( *sp++ != '\0' ) ;
return sp - str - 1;
}
Эта реализация использует указатель sp, который движется по строке. Оператор постинкремента *sp++ разыменовывает текущий символ, одновременно продвигая указатель. Финальный расчёт sp - str - 1 определяет длину, вычитая начальный адрес из конечной позиции указателя и корректируя на единицу.
Функция main проверяет обе реализации, сравнивая их результаты для нескольких входных строк и убеждаясь в согласованности обоих подходов. Это наглядная демонстрация того, что арифметика указателей может быть эффективной альтернативой традиционному индексированию на C++.
Функция strlen2 использует арифметику указателей для вычисления длины строки, сравнивая финальную позицию указателя с начальной позицией, и требует корректировки с вычитанием 1, потому что указатель выходит за null-терминатор на одну позицию.
Новый — ещё не проверен сообществом
Вы