Длина строки
Сколько символов в строке? sizeof тут не поможет: он даёт размер всего массива, включая '\0', а позже в этом уроке вы увидите массивы, в которых места больше, чем нужно тексту. Для этого в C есть готовая функция. Функция — это кусок кода с именем, который выполняет одну работу. Чтобы её использовать, напишите её имя и в скобках то, с чем она должна работать. printf — тоже функция.
Функции для строк находятся в библиотеке string.h. Библиотека — это набор готовых функций. Чтобы ими пользоваться, подключите её заголовочный файл в начале программы, как вы подключаете stdio.h ради printf:
#include <stdio.h>
#include <string.h>
int main(void) {
char name[] = "Anna";
int length = strlen(name);
printf("Букв в слове %s: %d\n", name, length);
return 0;
}Это выведет:
Букв в слове Anna: 4Функция strlen (string length, «длина строки») считает символы до нулевого символа; сам '\0' не считается. Пробелы и знаки препинания — тоже символы, поэтому у "Hi, Tom!" длина 8. Если забыть #include <string.h>, сообщение об ошибке начнётся с call to undeclared library function 'strlen', а примечание под ним подскажет, какой заголовочный файл подключить.
Почему длину сначала сохраняют в переменную length? Может возникнуть соблазн поставить strlen прямо в printf, но тогда программа не скомпилируется:
char name[] = "Anna";
printf("%d\n", strlen(name));main.c:6:20: error: format specifies type 'int' but the argument has type '__size_t' (aka 'unsigned long') [-Werror,-Wformat]strlen возвращает результат в другом виде целого числа, size_t, которое не может быть отрицательным, а %d подходит только для int. Когда вы сохраняете результат в переменную типа int, он преобразуется в int, и %d подходит. (Под сообщением Clang предлагает %zu — спецификатор формата для size_t. Это тоже работает.)
Зная длину, можно найти последний символ. Он лежит по индексу length - 1, потому что индексы начинаются с 0. По индексу length лежит '\0':
char name[] = "Anna";
int length = strlen(name);
printf("Последняя буква: %c\n", name[length - 1]);Это выведет:
Последняя буква: aБудьте осторожны с русскими буквами, а также с буквами с диакритическими знаками, такими как é или ü. Текст хранится в кодировке UTF-8, и в ней такая буква занимает два char:
int length = strlen("кот");
printf("%d\n", length);Это выведет:
6Поэтому последний char слова "кот" — лишь половина буквы т. Тексты по-русски выводить можно без всяких проблем, но строки, с которыми вы работаете посимвольно, пишите латиницей.
Задание
- 1
Добавьте
#include <string.h>в начало программы. Подprintfсохраните длинуcityв переменнуюlengthтипаintс помощьюstrlenи выведите её, чтобы в выводе была строкаБукв: 9. - 2
Затем выведите последнюю букву города,
city[length - 1], через%c:Последняя буква: m.