Использование strcat()
Часть раздела Логика и управление потоком путешествия по 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() находит нулевой терминатор в строке назначения, удаляет его, копирует исходную строку в это место и добавляет новый нулевой терминатор в самом конце.
Иногда нужно объединить число (например, int) со строкой. Поскольку strcat() работает только с массивами символов, сначала нужно преобразовать число в строку. Это можно сделать с помощью sprintf(), которая работает так же, как printf(), но записывает отформатированный результат в массив символов вместо вывода его на экран. sprintf() является частью <stdio.h>, который уже подключён в большинстве программ на C.
int n = 42;
char numStr[20];
sprintf(numStr, "%d", n); // numStr теперь содержит "42" в виде строкиПосле того как number сохранено как string в numStr, вы можете использовать strcat(), чтобы, как обычно, добавить его к другой string:
char summary[100] = "Total people processed: ";
int n = 3;
char numStr[20];
sprintf(numStr, "%d", n);
strcat(summary, numStr); // summary now contains "Total people processed: 3"Эта функция необходима для создания более длинных строк из небольших частей, например для составления полных предложений из отдельных слов или объединения пользовательского ввода с заранее заданным текстом.
Задание
ЛегкоНапишите программу на 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() для начальной настройки строки и пошагового создания сложных строк из нескольких компонентов.
Попробуйте сами
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
// Считать количество людей
int n;
scanf("%d", &n);
// TODO: Напишите ваш код ниже
// Обработать каждого человека и создать приветственные сообщения
// Затем создать и отобразить итоговое сообщение
return 0;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Основы указателей
Что такое указатель?Объявление указателейОператор взятия адреса (&)Оператор разыменования (*)Указатели NULLИтоги: Основы указателей4Проект: Простая текстовая утилита
Обзор проектаПодсчет символов2Указатели и массивы
Имена массивов как указателиЭлементы массива — указателиАрифметика указателейСравнение указателейИтоги: Обход массива через указатели5Указатели и функции
Передача по значениюПередача указателей в функцииИзменение переменных через указателиКлассический пример: SwapПередача массивов в функцииИтоги: указатели как аргументы функций8Структуры и указатели
Указатели на структурыОператор «стрелка» (->)Передача структур по значениюПередача указателей на структурыДинамическое выделение памяти для структурИтоги: Изменение структур через указатели11Итоговые задачи на повторение
Повторение: динамическая конкатенация строкПовторение: массив структурПовторение: счетчик частоты слов3Символьные массивы и строки
Строки как массивы charНуль-терминаторВвод строк с помощью scanfИспользование strlen()Использование strcpy()Использование strcat()Использование strcmp()Итоги: основные строковые функцииПотренируйтесь самостоятельно: Онлайн-компилятор C