Использование strcat()
Часть раздела Logic & Flow путешествия по C на Coddy — урок 17 из 63.
Вы узнали, как копировать строки с помощью strcpy(), но что, если вы хотите объединить две строки вместе? Это называется конкатенацией, и язык C предоставляет функцию strcat() из библиотеки <string.h> для этой цели.
Функция strcat() добавляет содержимое одной строки в конец другой строки. Она принимает два аргумента: строку назначения (которая будет изменена) и исходную строку (которая будет добавлена в конец).
#include <stdio.h>
#include <string.h>
char greeting[20] = "Hello";
char name[] = " World";
strcat(greeting, name); // теперь greeting содержит "Hello World"Крайне важно, чтобы ваша строка назначения имела достаточно места для хранения как исходного содержимого, так и нового добавляемого содержимого. Функция strcat() находит нулевой терминатор в строке назначения, удаляет его, копирует исходную строку в это место и добавляет новый нулевой терминатор в самом конце.
Эта функция необходима для создания более длинных строк из более мелких фрагментов, таких как создание полных предложений из отдельных слов или объединение пользовательского ввода с заранее определенным текстом.
Иногда вам нужно преобразовать число в строку, прежде чем вы сможете выполнить конкатенацию. Для этого вы можете использовать sprintf() из <stdio.h> (который уже включен в большинство программ на C). sprintf() работает точно так же, как printf(), но вместо вывода на экран он записывает отформатированный результат в массив char.
Например, чтобы преобразовать целое число в строку:
int age = 25;
char ageStr[10];
sprintf(ageStr, "%d", age); // ageStr теперь содержит "25"
char result[30] = "Age: ";
strcat(result, ageStr); // result теперь содержит "Age: 25"Первым аргументом
sprintf() является целевой массив char, вторым — строка формата (использующая те же спецификаторы формата, что и printf()), а остальные аргументы — это значения для вставки.Задание
ЛегкоНапишите программу на языке C, которая демонстрирует конкатенацию строк с использованием функции strcat() для создания персонализированных сообщений. Ваша программа должна:
- Считать целое число
n, представляющее количество людей для обработки - Для каждого человека:
- Считать имя из входных данных
- Считать фамилию из входных данных
- Создать символьный массив с именем
fullNameиз 100 элементов - Использовать
strcpy()для копирования имени вfullName - Использовать
strcat()для добавления одного пробела " " кfullName - Использовать
strcat()для добавления фамилии кfullName - Создать символьный массив с именем
greetingиз 150 элементов - Использовать
strcpy()для копирования "Hello, " вgreeting - Использовать
strcat()для добавленияfullNameкgreeting - Использовать
strcat()для добавления "! Welcome to our program." кgreeting - Вывести итоговое приветственное сообщение
- После обработки всех людей создать итоговое сообщение:
- Создать символьный массив с именем
summaryиз 100 элементов - Использовать
strcpy()для копирования "Total people processed: " вsummary - Преобразовать число
nв строку и использоватьstrcat()для добавления его кsummary - Вывести итоговое сообщение
- Создать символьный массив с именем
Не забудьте включить заголовочный файл <string.h> для использования строковых функций.
Ваш вывод должен отображать результаты в следующем формате:
Hello, [FirstName LastName]! Welcome to our program.
Hello, [FirstName LastName]! Welcome to our program.
...
Total people processed: [n]Например, если входные данные:
2
John
Doe
Alice
SmithВаш вывод должен быть:
Hello, John Doe! Welcome to our program.
Hello, Alice Smith! Welcome to our program.
Total people processed: 2Эта задача проверяет ваше понимание использования strcat() для объединения нескольких строк, сочетания её с strcpy() для начальной настройки строки и пошагового создания сложных строк из нескольких компонентов.
Шпаргалка
Функция strcat() из <string.h> объединяет (конкатенирует) две строки, добавляя исходную строку в конец целевой строки.
Синтаксис: strcat(destination, source)
#include <stdio.h>
#include <string.h>
char greeting[20] = "Hello";
char name[] = " World";
strcat(greeting, name); // greeting теперь содержит "Hello World"Важно: Целевая строка должна иметь достаточно места для хранения как исходного содержимого, так и добавляемого. Функция находит нулевой терминатор в целевой строке, удаляет его, копирует исходную строку в это место и добавляет новый нулевой терминатор в конце.
Функция sprintf() из <stdio.h> работает аналогично printf(), но записывает отформатированный результат в массив символов (строку) вместо вывода на экран. Это делает её полезной для преобразования целых чисел (или других значений) в строки.
Синтаксис: sprintf(destination, format, value)
#include <stdio.h>
int num = 42;
char numStr[10];
sprintf(numStr, "%d", num); // numStr теперь содержит "42"Важно: Целевой массив должен быть достаточно большим, чтобы вместить результирующую строку, включая нулевой терминатор.
Попробуйте сами
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
// Считать количество людей
int n;
scanf("%d", &n);
// TODO: Напишите свой код ниже
// Обработать каждого человека и создать приветственные сообщения
// Затем создать и вывести итоговое сообщение
return 0;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
1Основы указателей
Что такое указатель?Объявление указателейОператор взятия адреса (&)Оператор разыменования (*)Указатели NULLИтоги: Основы указателей4Проект: Простая текстовая утилита
Обзор проектаПодсчет символов2Указатели и массивы
Имена массивов как указателиЭлементы массива — указателиАрифметика указателейСравнение указателейИтоги: Обход массива через указатели5Указатели и функции
Передача по значениюПередача указателей в функцииИзменение переменных через указателиКлассический пример: SwapПередача массивов в функцииИтоги: указатели как аргументы функций8Структуры и указатели
Указатели на структурыОператор «стрелка» (->)Передача структур по значениюПередача указателей на структурыДинамическое выделение памяти для структурИтоги: Изменение структур через указатели11Итоговые задачи на повторение
Повторение: динамическая конкатенация строкПовторение: массив структурПовторение: счетчик частоты слов3Символьные массивы и строки
Строки как массивы charНуль-терминаторВвод строк с помощью scanfИспользование strlen()Использование strcpy()Использование strcat()Использование strcmp()Итоги: основные строковые функции