Программы
Строки в Си

Строки в Си

Если во многих высокоуровневых языках строки – само собой разумеющееся, то в Си нужно строки знать и уметь ими пользоваться.

Самое время после массивов рассмотреть Си-строки, ведь они – всего лишь массив однобайтовых символов.

Ещё один пример "сахара" в Си. Удобный.

    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.