Повторение: динамическая конкатенация строк
Часть раздела Логика и управление потоком путешествия по C на Coddy. Урок 61 из 63.
Задание
ЛегкоСоздайте программу на C, реализующую функцию динамической конкатенации строк для создания утилиты обработки текста. Ваша программа должна:
- Написать функцию с именем
concatenateStrings, которая:- Принимает два параметра
char*с именамиstr1иstr2 - Возвращает
char*, указывающий на динамически выделенную строку - Вычисляет общий объём памяти, необходимый для обеих строк и завершающего нулевого символа
- Использует
malloc(), чтобы выделить ровно необходимый объём памяти - Проверяет, успешно ли выделена память (возвращает NULL, если выделение не удалось)
- Использует
strcpy(), чтобы скопировать первую строку в выделенную память - Использует
strcat(), чтобы добавить вторую строку к результату - Возвращает указатель на новую созданную конкатенированную строку
- Принимает два параметра
- Написать функцию с именем
processText, которая:- Принимает три параметра
char*:word1,word2иseparator - Возвращает
char*, указывающий на динамически выделенную строку - Создаёт объединённую строку в формате: word1 + separator + word2
- Сначала вызывает
concatenateStrings, чтобы объединитьword1иseparator - Затем снова вызывает
concatenateStrings, чтобы добавитьword2к результату - Корректно освобождает всю промежуточно выделенную память
- Возвращает итоговый результат конкатенации
- Принимает три параметра
- В главной функции:
- Объявить три символьных массива размером 50 каждый:
firstWord,secondWordиconnector - Считать из входных данных три строки: первое слово, второе слово и соединитель
- Вызвать функцию
processTextс этими тремя строками - Проверить, что возвращённый указатель не равен NULL
- Если всё прошло успешно, вывести результат в точном формате:
Result: [concatenated_string] - Если выделение памяти не удалось, вывести:
Memory allocation failed - Вычислить и вывести длину строки результата в точном формате:
Length: [length] - Освободить динамически выделенную память
- Объявить три символьных массива размером 50 каждый:
Это задание проверяет ваше владение динамическим выделением памяти, функциями обработки строк, возвращаемыми указателями и правильным управлением памятью. Вы попрактикуетесь в вычислении необходимого объёма памяти, использовании malloc() и free(), работе с несколькими строковыми функциями и обработке ошибок выделения памяти. Задание показывает, как динамическое выделение памяти позволяет функциям создавать и возвращать данные, которые сохраняются за пределами их области видимости.
Попробуйте сами
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// TODO: Напишите здесь функцию concatenateStrings
// TODO: Напишите здесь функцию processText
int main() {
// Считайте входные данные
char firstWord[50];
char secondWord[50];
char connector[50];
scanf("%s", firstWord);
scanf("%s", secondWord);
scanf("%s", connector);
// TODO: Напишите свой код ниже
// Вызовите функцию processText и обработайте результат
return 0;
}Все уроки раздела Логика и управление потоком
1Основы указателей
Что такое указатель?Объявление указателейОператор взятия адреса (&)Оператор разыменования (*)Указатели NULLИтоги: Основы указателей4Проект: Простая текстовая утилита
Обзор проектаПодсчет символов2Указатели и массивы
Имена массивов как указателиЭлементы массива — указателиАрифметика указателейСравнение указателейИтоги: Обход массива через указатели5Указатели и функции
Передача по значениюПередача указателей в функцииИзменение переменных через указателиКлассический пример: SwapПередача массивов в функцииИтоги: указатели как аргументы функций8Структуры и указатели
Указатели на структурыОператор «стрелка» (->)Передача структур по значениюПередача указателей на структурыДинамическое выделение памяти для структурИтоги: Изменение структур через указатели11Итоговые задачи на повторение
Повторение: динамическая конкатенация строкПовторение: массив структурПовторение: счетчик частоты слов3Символьные массивы и строки
Строки как массивы charНуль-терминаторВвод строк с помощью scanfИспользование strlen()Использование strcpy()Использование strcat()Использование strcmp()Итоги: основные строковые функцииПотренируйтесь самостоятельно: Онлайн-компилятор C