Menu
Coddy logo textTech

Повторение: динамическая конкатенация строк

Часть раздела Logic & Flow путешествия по C на Coddy — урок 61 из 63.

challenge icon

Задание

Легко

Создайте программу на языке C, которая реализует функцию динамической конкатенации строк для создания утилиты обработки текста. Ваша программа должна:

  1. Написать функцию с именем concatenateStrings, которая:
    • Принимает два параметра типа char* с именами str1 и str2
    • Возвращает char*, указывающий на динамически выделенную строку
    • Вычисляет общий объем памяти, необходимый для обеих строк плюс нулевой терминатор
    • Использует malloc() для выделения точного объема необходимой памяти
    • Проверяет, было ли выделение памяти успешным (возвращает NULL, если выделение не удалось)
    • Использует strcpy() для копирования первой строки в выделенную память
    • Использует strcat() для добавления второй строки к результату
    • Возвращает указатель на вновь созданную объединенную строку
  2. Написать функцию с именем processText, которая:
    • Принимает три параметра типа char*: word1, word2 и separator
    • Возвращает char*, указывающий на динамически выделенную строку
    • Создает комбинированную строку в формате: word1 + separator + word2
    • Сначала вызывает concatenateStrings для объединения word1 и separator
    • Затем снова вызывает concatenateStrings, чтобы добавить word2 к результату
    • Правильно освобождает любую промежуточную выделенную память
    • Возвращает окончательный объединенный результат
  3. В функции main:
    • Объявить три символьных массива размером 50 каждый: firstWord, secondWord и connector
    • Считать три строки из входных данных, представляющие первое слово, второе слово и соединитель
    • Вызвать функцию processText с этими тремя строками
    • Проверить, что возвращенный указатель не равен NULL
    • В случае успеха вывести результат в точном формате: Result: [concatenated_string]
    • Если выделение памяти не удалось, вывести: Memory allocation failed
    • Вычислить и вывести длину результирующей строки в точном формате: Length: [length]
    • Освободить динамически выделенную память

Эта задача проверяет ваше владение динамическим выделением памяти, функциями манипулирования строками, возвращаемыми значениями указателей и правильным управлением памятью. Вы попрактикуетесь в расчете требований к памяти, использовании 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