Перевод на русский язык

Строки в C: Пособие для начинающих

Здравствуйте, будущие программисты! Сегодня мы отправимся в увлекательное путешествие в мир строк в языке C. Не волнуйтесь, если вы完全不 знакомы с программированием — я буду вашим дружелюбным проводником, и мы будем двигаться шаг за шагом. К концу этого руководства вы будете работать с строками в C, как профессионал!

C - Strings

Что такое строки в C?

Давайте начнем с азов. В C строка — это essentiallysequence из символов. Представьте себе бусы, где каждая бусина — это символ. Эти символы хранятся в смежных ячейках памяти, заканчиваясь специальным символом, называемым нулевым символом ('\0').

Интересный факт: в C нет отдельного типа данных для строк. Вместо этого мы используем массив символов для представления строки. Это как использование ряда почтовых ящиков для хранения серии писем!

Создание строки в C

Теперь давайте脏our руки и создадим свою первую строку в C. Есть несколько способов сделать это, но мы начнем с самого простого метода:

char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

В этом примере мы создали строку под названием greeting, которая содержит слово "Hello". Давайте разберем это:

  • char — это тип данных для символов.
  • greeting — это имя нашей строки.
  • [6] указывает размер нашего массива. Нам нужно 6 мест: 5 для "Hello" и 1 для нулевого символа.
  • Символы заключены в одинарные кавычки и разделены запятыми.
  • Не забудьте нулевой символ '\0' в конце!

Инициализация строки без указания размера

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

char greeting[] = "Hello";

Не schlecht? C автоматически добавляет нулевой символ и calculatesразмер. Это как магия, но это просто C, который эффективен!

Цикл по строке

Теперь у нас есть строка, давайте научимся циклически обрабатывать её. Это полезно, когда вы хотите обработать каждый символ individually:

#include <stdio.h>

int main() {
char greeting[] = "Hello";
int i = 0;

while (greeting[i] != '\0') {
printf("%c", greeting[i]);
i++;
}

return 0;
}

Этот код выводит каждый символ "Hello" по одному. Цикл продолжается до тех пор, пока не встретится нулевой символ, который сигнализирует о конце строки.

Вывод строки (используя форматный спецификатор %s)

Циклическое прохождение строки символ за символом весело, но есть более легкий способ вывести строки:

#include <stdio.h>

int main() {
char greeting[] = "Hello, World!";
printf("%s", greeting);
return 0;
}

Форматный спецификатор %s говорит printf, что ожидается строка. Это как предупреждение printf: "Эй, к тебе идет строка!"

Создание строки с использованием двойных кавычек

Помните наш первый пример, где мы создавали строку символ за символом? Ну, есть shortcut:

char greeting[] = "Hello, World!";

Это делает то же самое, что и наш предыдущий пример, но гораздо короче. C заботится о добавлении нулевого символа за нас. Это как заказать уже собранные бусы вместо того, чтобы собирать их самостоятельно!

Ввод строки с использованием scanf()

Теперь давайте сделаем нашу программу интерактивной, получив ввод от пользователя:

#include <stdio.h>

int main() {
char name[50];
printf("Введите ваше имя: ");
scanf("%s", name);
printf("Здравствуйте, %s!\n", name);
return 0;
}

Здесь мы используем scanf() для чтения строки из ввода пользователя. Но будьте осторожны! scanf() останавливается на первом встречном пробеле. Так что если вы введете "John Doe", только "John" будет сохранен в name.

Ввод строки с пробелами

Для чтения строки с пробелами мы можем использовать следующий форматный спецификатор с scanf():

#include <stdio.h>

int main() {
char fullName[100];
printf("Введите ваше полное имя: ");
scanf("%[^\n]s", fullName);
printf("Здравствуйте, %s!\n", fullName);
return 0;
}

Форматный спецификатор %[^\n]s говорит scanf() читать до тех пор, пока не встретится символ новой строки. Это позволяет нам читать полные имена или предложения с пробелами.

Ввод строки с использованием функций gets() и fgets()

Хотя gets() прост в использовании, он считается небезопасным, так как не выполняет проверку границ. Вместо этого давайте используем более безопасную функцию fgets():

#include <stdio.h>

int main() {
char sentence[100];
printf("Введите предложение: ");
fgets(sentence, sizeof(sentence), stdin);
printf("Вы ввели: %s", sentence);
return 0;
}

fgets() безопаснее, так как позволяет указать максимальное количество символов для чтения, помогая предотвратить переполнение буфера.

Вывод строки с использованием функций puts() и fputs()

Наконец, рассмотрим альтернативные способы вывода строк:

#include <stdio.h>

int main() {
char greeting[] = "Hello, World!";
puts(greeting);  // puts() автоматически добавляет новую строку
fputs(greeting, stdout);  // fputs() не добавляет новую строку
return 0;
}

puts() прост и автоматически добавляет новую строку, в то время как fputs() дает вам больше контроля над выводом.

Вот таблица, резюмирующая функции строк, которые мы рассмотрели:

Функция Назначение Пример
scanf() Чтение форматированного ввода scanf("%s", str);
gets() Чтение строки (небезопасно, избегайте использования) gets(str);
fgets() Чтение строки безопасно fgets(str, size, stdin);
printf() Вывод форматированного вывода printf("%s", str);
puts() Вывод строки с новой строкой puts(str);
fputs() Вывод строки без новой строки fputs(str, stdout);

И вот вы уже сделали свои первые шаги в мир строк в C. Помните, что практика makes perfect, так что не бойтесь экспериментировать с этими концепциями. Счастливого программирования и пусть ваши строки всегда будут нуле-терminated!

Credits: Image by storyset