Самое время после массивов рассмотреть Си-строки, ведь они – всего лишь массив однобайтовых символов.
Ещё один пример "сахара" в Си. Удобный.
char text[8] = "Hello C";
Зачем 8, а не 7 элементов мы выделили?
Всё потому что требуется ещё и символ \0 (нулевой байт) в конце строки – символ конца строки в Си-строках. Также можно было реализовать строки с зарезервированным первым байтом - счётчиком используемых символов. Однако, в Си / Unix решили использовать стоп-байт.
Пример программы strlen
– подсчёт длины строки:
#include <stdio.h>
int main(void) {
char *text = "Hello world"; // А вот и "сахар"!
// Обратите внимание на двойные кавычки – это как раз определяет строку.
// В то время как одинарные кавычки определяют одиночный символ.
int i = 0;
while (text[i++] != 0); // Блок while нам не понадобится
// - просто двигаемся вперёд, пока не увидим нулевой байт.
printf("%d", i - 1); // Один раз сделали "лишний" ++
return 0;
}
В случае, если мы хотим вывести строку через printf
, используем формат "%s"
:
printf("%s\n", text);
printf("%d\n", strlen(text));
Множество полезных функций аналогичных strlen
определены в заголовочном файле string.h
.
Их описание можно найти в man string
. Пример сравнения начальных символов двух строк:
#include <string.h>
#include <stdio.h>
int main(void) {
// Получим на ввод строку
char name[16];
scanf("%s", name);
// Сравним первые 5 символов
if (strncmp(name, "Hello", 5) == 0) {
printf("Hello!\n");
} else {
printf("Not equal.\n");
}
// Пример ещё одной функции из string.h
char dest[10]="Hello";
char src[]="World";
// Складываем строки. Кладём в первую 3 символа второй.
strncat(dest, src, 3);
printf("%s\n", dest);
return 0;
}
ДЗ
-
Написать вывод таблицы квадратов в псевдографике.
- балл за реализацию на указателях
-
Написать функцию
strncat
.