Строки и функции
Строка — это массив значений char, поэтому функция получает её как параметр так же, как любойдругой массив:
#include <stdio.h>
void introduce(const char name[]) {
printf("Меня зовут %s.\n", name);
}
int main(void) {
char friend_name[] = "Том";
introduce("Анна");
introduce(friend_name);
return 0;
}Эта программа выводит:
Меня зовут Анна.
Меня зовут Том.Передать можно текст в кавычках или массив char. Есть два отличия от массивов чисел изпредыдущего упражнения:
- Нет количества. Строка заканчивается нулевым символом
'\0', поэтому функция сама может найтиеё конец: в цикле, который останавливается на'\0', или с помощьюstrlen. - Перед типом стоит слово
const, которое вы знаете по константам. Это обещание, что функциятолько читает строку и не изменяет её. Если бы функция попыталась, например, написатьname[0] = 'X';,программа не скомпилировалась бы:error: read-only variable is not assignable(в переменную,которая только для чтения, нельзя записать значение). Пишитеconstвсегда, когда функция толькочитает строку. Тогда любой, кто читает функцию, сразу видит, что текст останется как есть.
Функция может пройти по строке в цикле и вернуть результат. Эта считает, сколько раз буква встречается втексте:
#include <stdio.h>
#include <string.h>
int count_letter(const char text[], char letter) {
int count = 0;
int length = strlen(text);
for (int i = 0; i < length; i++) {
if (text[i] == letter) {
count++;
}
}
return count;
}
int main(void) {
printf("%d\n", count_letter("banana", 'a'));
printf("%d\n", count_letter("Mississippi", 's'));
return 0;
}Эта программа выводит:
3
4Функция без const может изменять строку. Как и с другими массивами, изменение остаётся вмассиве вызывающего кода:
#include <ctype.h>
#include <stdio.h>
void make_upper(char text[]) {
for (int i = 0; text[i] != '\0'; i++) {
text[i] = toupper(text[i]);
}
}
int main(void) {
char message[] = "hello";
make_upper(message);
printf("%s\n", message);
return 0;
}Эта программа выводит:
HELLOОдного функция сделать не может — вернуть массив, а значит, не может вернуть новую строку так, каквозвращает число. Когда функция должна создать текст, она записывает его в массив char, который ейпередал вызывающий код, так же как make_upper изменяет message.
Задание
- 1
Выше
mainнапишите функциюannounce_player, которая ничего не возвращает иимеет один параметр,name: строку, которую функция только читает. Функция выводит строку видаВаш ход, Ева!с полученным именем. - 2
В
mainсоздайте массивplayerс текстом"Ева"и вызовитеannounce_player(player). Затем вызовитеannounce_player("Адам"). Программа выводитВаш ход, Ева!иВаш ход, Адам!. - 3
Под
announce_playerнапишите функциюcount_digitsс параметромtext,снова строкой, которую функция только читает. Она возвращает, сколько цифр содержится в тексте; узнать, цифра лисимвол, помогаетisdigitизctype.h. В концеmain, передreturn 0;, выведите результатcount_digits("summer2024")с подписью:Цифр: 4.