Символы строки
Строка — это массив, поэтому у каждого её символа есть индекс, который отсчитывается от 0, как у любого массива. name[0] — первый символ. У него тип char, поэтому выводится он через %c:
char name[] = "Tina";
printf("%c\n", name[0]);
printf("%c\n", name[3]);Это выведет:
T
aУ последней буквы слова "Tina" индекс 3, а по индексу 4 лежит нулевой символ. Выведите его как число через %d, и вы увидите, что он действительно там:
printf("%d\n", name[4]);Это выведет:
0Не путайте %s и %c: %s — для целой строки, %c — для одного символа. С printf("%s\n", name[0]); программа не скомпилируется, а под сообщением Clang даже подсказывает правильный спецификатор формата, %c:
char name[] = "Tina";
printf("%s\n", name[0]);main.c:5:20: error: format specifies type 'char *' but the argument has type 'char' [-Werror,-Wformat]Символ можно и изменить. Присвойте элементу новый символ, как в любом массиве:
char name[] = "Tina";
name[0] = 'N';
printf("%s\n", name);Это выведет:
NinaНовый символ пишется в одинарных кавычках. name[0] = "N"; поместило бы целую строку туда, где должен быть один символ, и вы получили бы ошибку про char[2] из предыдущего упражнения.
Одинарные кавычки важны и в условиях. Чтобы проверить первую букву, напишите if (name[0] == 'N'). С двойными кавычками, if (name[0] == "N"), программа здесь скомпилируется, но условие никогда не выполнится, потому что вы сравниваете один символ с целой строкой. Clang предупреждает об этом, но этот сайт предупреждения не показывает, так что вы лишь увидите, что программа делает не то, что нужно.
Размер массива остаётся прежним. В "Tina" есть место для 4 букв и '\0', поэтому name[5] = 's'; выходит за конец массива, и программа не скомпилируется. Как освободить место для более длинного текста, вы увидите позже в этом уроке.
Задание
- 1
Выведите первый и последний символ
wordв одной строке через пробел, используя%c. В выводе должна быть строкаm e. - 2
Ниже измените первый символ
wordна'h'и снова выведите всё слово через%s:house.