Конкатенация (сложение) строк - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Необходимо составить функцию выполняющую конкатенацию произвольного количества строк:
char *concat(char **s, int n) 
{ 
    ... 
}
Здесь s – указатель на массив соединяемых строк, n – количество строк в массиве. Функция должна создавать в динамической памяти новую строку, размер которой равен суммарному размеру всех соединяемых строк, записывать в неё соединяемые строки друг за другом в том порядке, в котором они перечислены в массиве, и возвращать указатель на новую строку. Программа concat.c должна считывать количество строк и сами соединяемые строки и выводить результирующую строку. Пример входных данных программы: 4 One, two, three, and four Для этих данных программа должна выводить в стандартный поток вывода строку One,two,three,and four Подскажите, как это можно сделать? В Си я новичок и поэтому даже не знаю с чего начать. Заранее спасибо)

Решение задачи: «Конкатенация (сложение) строк»

textual
Листинг программы
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
 
char *concat(char **s, int n) {
    int length = 0;
    for(int i = 0; i < n; i++)
        length += strlen(s[i]);
    length++;
    char *string = (char *)malloc(length);
    strcpy(string, "");
    for(int i = 0; i < n; i++) {
        strcat(string, s[i]);
    }
    return string;
}
 
int main() {
    char *string[5];
 
    //allocate memory
    for(int i = 0; i < 5; i++)
        string[i] = (char *)malloc(50);
    //enter strings
    for(int i = 0; i < 5; i++)
        gets(string[i]);
    char *temporary_string = concat(string, 5);
    puts(temporary_string);
 
    //free memory
    for(int i = 0; i < 5; i++)
        free(string[i]);
    free(temporary_string);
    system("pause");
    return 0;
}

Объяснение кода листинга программы

  1. В функции main создается массив указателей на строки string размером 5.
  2. В цикле for каждому элементу массива string выделяется память с помощью malloc и присваивается адрес с помощью &.
  3. В цикле for каждому элементу массива string считывается строка с помощью gets.
  4. В функции concat создается указатель на первую строку s[0].
  5. В цикле for начиная с 0 и до n включительно, происходит суммирование длин строк с помощью функции strlen и сохранение результата в переменной length.
  6. К значению переменной length добавляется единица, чтобы учесть нулевой символ в итоговой строке.
  7. С помощью malloc выделяется память под итоговую строку с учетом нулевого символа и с помощью strcpy в эту память копируется пустая строка.
  8. В цикле for начиная с 0 и до n включительно, происходит добавление каждой строки к итоговой строке с помощью функции strcat.
  9. Функция concat возвращает указатель на итоговую строку.
  10. В функции main создается временная строка temporary_string с помощью concat, указывая массив string и количество строк в нем.
  11. С помощью puts временная строка выводится на экран.
  12. В цикле for начиная с 0 и до 5 включительно, происходит освобождение памяти, выделенной под каждый элемент массива string, с помощью free.
  13. Память, выделенная под временную строку, также освобождается с помощью free.
  14. Команда system(pause) приостанавливает выполнение программы до нажатия клавиши.
  15. Функция main возвращает 0, что означает успешное выполнение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.75 из 5
Похожие ответы