Перебор символов C-строки

Для перебора символов удобно использовать цикл for. В первом параметре переменной-счетчику присваивается значение 0 (символы в строке нумеруются с нуля), условием продолжения является значение переменной-счетчика меньше количества символов в строке. В третьем параметре цикла for указывается приращение на единицу на каждой итерации цикла. Выведем все символы строки в прямом и обратном порядке:

char str[] = "String";
int len = (int)std::strlen(str);
// Выводим символы в прямом порядке
for (int i = 0; i < len; ++i) {
   std::cout << str[i] << std::endl;
}
std::cout << "-------------------" << std::endl;
// Выводим символы в обратном порядке
for (int i = len - 1; i >= 0; --i) {
   std::cout << str[i] << std::endl;
}

В этом примере количество символов сохраняется в переменной len вне цикла. Если функцию strlen() указать внутри условия, то вычисление количества символов будет выполняться на каждой итерации цикла. Поэтому количество символов лучше получать вне цикла или присваивать значение переменной в первом параметре цикла for. Пример:

char str[] = "String";
for (int i = 0, len = (int)std::strlen(str); i < len; ++i) {
   std::cout << str[i] << std::endl;
}

Перебор символов C-строки с помощью указателя и цикла for выполняется так:

char str[] = "String";
for (char *p = str; *p; ++p) {
   std::cout << *p << std::endl;
}

В этом примере начальным значением является адрес первого символа. Условием продолжения цикла является значение на которое ссылается указатель. Любой символ трактуется как true, кроме нулевого символа, который имеет код 0. Так как C-строка завершается нулевым символом, то этот символ вернет значение false и цикл завершится. В третьем параметре цикла for указывается приращение указателя на единицу на каждой итерации цикла. В этом случае используются правила адресной арифметики.

Вместо цикла for всегда можно использовать цикл while:

char str[] = "String";
char *p = str;
while (*p) {
   std::cout << *p++ << std::endl;
}
p = str; // Восстанавливаем положение указателя

Вначале объявляются строка и указатель, которому присваивается адрес первого символа. Цикл while выполняется до тех пор, пока значение, на которое ссылается указатель, не равно нулевому символу. Внутри цикла while выводится символ, на который ссылается указатель, а затем указатель перемещается на следующий символ (*p++). Выражение p++ возвращает текущий адрес, а затем увеличивает его. Символ * позволяет получить доступ к символу по указанному адресу. Последовательность выполнения соответствует следующей расстановке скобок: *(p++) или двум инструкциям: *p и p = p + 1.

Учебник C++ (MinGW-W64)
Учебник C++ (MinGW-W64) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов