Повторение: динамическая конкатенация строк
Часть раздела Logic & Flow путешествия по 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к результату - Правильно освобождает любую промежуточную выделенную память
- Возвращает окончательный объединенный результат
- Принимает три параметра типа
- В функции main:
- Объявить три символьных массива размером 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;
}Все уроки раздела Logic & Flow
1Основы указателей
Что такое указатель?Объявление указателейОператор взятия адреса (&)Оператор разыменования (*)Указатели NULLИтоги: Основы указателей4Проект: Простая текстовая утилита
Обзор проектаПодсчет символов2Указатели и массивы
Имена массивов как указателиЭлементы массива — указателиАрифметика указателейСравнение указателейИтоги: Обход массива через указатели5Указатели и функции
Передача по значениюПередача указателей в функцииИзменение переменных через указателиКлассический пример: SwapПередача массивов в функцииИтоги: указатели как аргументы функций8Структуры и указатели
Указатели на структурыОператор «стрелка» (->)Передача структур по значениюПередача указателей на структурыДинамическое выделение памяти для структурИтоги: Изменение структур через указатели11Итоговые задачи на повторение
Повторение: динамическая конкатенация строкПовторение: массив структурПовторение: счетчик частоты слов3Символьные массивы и строки
Строки как массивы charНуль-терминаторВвод строк с помощью scanfИспользование strlen()Использование strcpy()Использование strcat()Использование strcmp()Итоги: основные строковые функции