Урок 7: Строки – Превращаем Символы в Слова (И Придаем Им Смысл)


Урок 7

Урок 7: Строки – Превращаем Символы в Слова (И Придаем Им Смысл)


Привет снова, отважный исследователь кода! 👋

Сегодня мы погружаемся в мир строк — ведь давай признаем, числа — это круто, но иногда нужны слова! Будь то вывод имени, чтение предложения или попытка сделать программу чуть более человечной, строки — это то, что тебе нужно.

Так что хватай свою чашку кофе (или чая — я не осуждаю), и давай научимся манипулировать символами, как настоящие профессионалы.


Что Такое Строка?

Строка в C — это по сути массив символов. Да-да, магия массивов возвращается! Но на этот раз вместо чисел мы храним символы, которые соединяются в слова, предложения или даже целые абзацы.

В C строки — это массивы типа char, которые заканчиваются специальным символом, называемым нулевым терминатором (\0), который сообщает программе, где заканчивается строка.

Вот как можно объявить строку:

char имя[10] = "Алиса";

Объяснение: Мы объявили массив символов имя, который может хранить до 10 символов. Строка "Алиса" хранится в этом массиве, и C автоматически добавляет нулевой терминатор в конце.


Вывод Строк

Вывод строк так же прост, как использование printf с форматом %s. Давай попробуем:

#include <stdio.h>

int main() {
    char имя[10] = "Алиса";
    printf("Привет, %s!\n", имя);
    return 0;
}

Объяснение: Мы использовали %s, чтобы вывести строку, хранящуюся в массиве имя. Легкотня, правда?


Ввод Строк от Пользователя

Получение строки от пользователя в C может быть немного хитрым. Можно использовать scanf, но это рискованно (если пользователь введет слишком много текста). Безопасный вариант — это fgets, который позволяет ограничить количество символов для чтения.

Вот как можно безопасно получить строку от пользователя:

#include <stdio.h>

int main() {
    char имя[50];
    printf("Введите своё имя: ");
    fgets(имя, sizeof(имя), stdin);  // Безопаснее, чем scanf
    printf("Привет, %s", имя);
    return 0;
}

Объяснение: fgets считывает до 49 символов (оставляя место для нулевого терминатора) из ввода пользователя и сохраняет их в массиве имя. Обратите внимание, как мы используем sizeof(имя), чтобы избежать переполнения памяти.


Примечание: В C функция strlen считает байты, а не символы. Это значит, что в UTF-8 строках, таких как "Привет", где каждый символ занимает 2 байта, strlen("Привет") вернет 12, а не 6. Если нужно посчитать символы, используйте отдельную функцию, которая поддерживает UTF-8.


Манипуляция Строками

Теперь поговорим о том, как манипулировать строками. Поскольку строки — это просто массивы символов, ты можешь получить доступ к отдельным символам и изменять их с помощью индекса, как в любом другом массиве.

Вот пример изменения первой буквы строки:

#include <stdio.h>

int main() {
    char имя[] = "Боб";
    printf("Оригинальное имя: %s\n", имя);

    имя[0] = 'Р';  // Меняем 'Б' на 'Р'
    printf("Изменённое имя: %s\n", имя);

    return 0;
}

Объяснение: Мы получили доступ к первому символу строки (индекс 0) и изменили его с 'Б' на 'Р', превращая "Боб" в "Роб".


Функции для Работы со Строками

C предоставляет набор функций для упрощения работы со строками. Вот несколько самых популярных:

  1. strlen – Возвращает длину строки (без нулевого терминатора).
  2. strcpy – Копирует одну строку в другую.
  3. strcmp – Сравнивает две строки, чтобы определить, одинаковы ли они.
  4. strcat – Конкатенирует (соединяет) две строки.

Давай попробуем их:

#include <stdio.h>
#include <string.h>  // Необходимо для строковых функций

int main() {
    char первая[20] = "Привет";
    char вторая[20] = "Мир";

    printf("Длина первой строки: %lu\n", strlen(первая));  // %lu для типа size_t
    strcat(первая, вторая);  // Соединяет вторую строку с первой
    printf("После объединения: %s\n", первая);

    strcpy(вторая, "Все");
    printf("Новая вторая строка: %s\n", вторая);

    if (strcmp(первая, вторая) == 0) {
        printf("Строки одинаковы.\n");
    } else {
        printf("Строки разные.\n");
    }

    return 0;
}

Объяснение:

  • strlen(первая) возвращает длину строки "Привет".
  • strcat(первая, вторая) соединяет "Мир" с концом строки "Привет", превращая её в "ПриветМир".
  • strcpy(вторая, "Все") копирует "Все" во вторую строку, заменяя "Мир".
  • strcmp(первая, вторая) сравнивает строки и сообщает, одинаковы они или разные.

Строки и Указатели

В C можно работать со строками и через указатели. Вот быстрый пример:

#include <stdio.h>

int main() {
    char *имя = "Алиса";
    printf("Привет, %s!\n", имя);
    return 0;
}

Объяснение: Здесь имя — это указатель на строку "Алиса". Это более эффективный с точки зрения памяти способ работы со строками, но требует осторожности, чтобы случайно не перезаписать память.


Домашнее Задание: Опрос о Любимом Фильме

Создай программу, которая:

  1. Спросит у пользователя название его любимого фильма.
  2. Выведет сообщение, включающее название фильма.
  3. Использует strlen, чтобы вывести, сколько символов в названии фильма.

Заключительные Мысли

Поздравляю! Ты только что освоил основы работы со строками в C. Строки чрезвычайно полезны для работы с текстом, и они встречаются повсюду в программировании. На Уроке 8 мы погрузимся глубже в функции, расширяя то, что ты уже узнал. До встречи там! 🎉✨


Смотрите также