Обход строки
Чтобы сделать что-то с каждым символом строки, например сосчитать определённые буквы или найти цифру, пройдите по ней в цикле — так же, как по массиву чисел. Есть одно отличие: для строки её длину знать не нужно. Цикл может остановиться на нулевом символе:
char word[] = "Hello";
for (int i = 0; word[i] != '\0'; i++) {
printf("%c\n", word[i]);
}Это выведет:
H
e
l
l
oЧитайте условие так: «пока символ с индексом i не равен концу текста». При первом проходе цикла i равно 0, а word[0] — это 'H'. После пятого прохода i равно 5, word[5] — это '\0', и цикл заканчивается.
Цикл можно записать и через strlen, как цикл по массиву с известным количеством элементов. Оба способа верны:
char word[] = "Hello";
int length = strlen(word);
for (int i = 0; i < length; i++) {
printf("%c ", word[i]);
}
printf("\n");Это выведет:
H e l l oВнутри цикла word[i] — это один символ, поэтому его можно проверить с помощью if. Этот цикл считает буквы l по тому же образцу подсчёта, что и в уроке о массивах:
char word[] = "Hello";
int count = 0;
for (int i = 0; word[i] != '\0'; i++) {
if (word[i] == 'l') {
count++;
}
}
printf("Количество l: %d\n", count);Это выведет:
Количество l: 2Остерегайтесь двух вещей. Сравнивайте символ в одинарных кавычках: с условием word[i] == "l" программа здесь скомпилируется, но условие никогда не выполнится, и счётчик останется равным 0. И заглавные и строчные буквы — это разные символы: 'H' == 'h' ложно, поэтому цикл, считающий 'h', ничего не найдёт в "Hello".
Задание
- 1
Пройдите по
wordцикломforи выведите её символы в одной строке, каждый с пробелом после него:M i s s i s s i p p i. Завершите строку после цикла с помощьюprintf("\n");. - 2
Ниже сосчитайте, сколько раз в слове встречается буква
s, и выведитеКоличество s: 4.