Перевод на русский язык
Строки в C: Пособие для начинающих
Здравствуйте, будущие программисты! Сегодня мы отправимся в увлекательное путешествие в мир строк в языке C. Не волнуйтесь, если вы完全不 знакомы с программированием — я буду вашим дружелюбным проводником, и мы будем двигаться шаг за шагом. К концу этого руководства вы будете работать с строками в C, как профессионал!
Что такое строки в 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