Menu
CoddyTech

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

Часть раздела Логика и управление потоком путешествия по 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. В главной функции:
    • Объявить три символьных массива размером 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;
}

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор C