Конкатенация (сложение) строк - C (СИ)
Формулировка задачи:
Необходимо составить функцию выполняющую конкатенацию произвольного количества строк:
Здесь s – указатель на массив соединяемых строк, n – количество строк в массиве.
Функция должна создавать в динамической памяти новую строку, размер которой равен суммарному размеру всех соединяемых строк, записывать в неё соединяемые строки друг за другом в том порядке, в котором они перечислены в массиве, и возвращать указатель на новую строку.
Программа concat.c должна считывать количество строк и сами соединяемые строки и выводить результирующую строку.
Пример входных данных программы:
4
One,
two,
three,
and four
Для этих данных программа должна выводить в стандартный поток вывода строку
One,two,three,and four
Подскажите, как это можно сделать? В Си я новичок и поэтому даже не знаю с чего начать. Заранее спасибо)
char *concat(char **s, int n) { ... }
Решение задачи: «Конкатенация (сложение) строк»
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; }
Объяснение кода листинга программы
- В функции
main
создается массив указателей на строкиstring
размером 5. - В цикле
for
каждому элементу массиваstring
выделяется память с помощьюmalloc
и присваивается адрес с помощью&
. - В цикле
for
каждому элементу массиваstring
считывается строка с помощьюgets
. - В функции
concat
создается указатель на первую строкуs[0]
. - В цикле
for
начиная с 0 и доn
включительно, происходит суммирование длин строк с помощью функцииstrlen
и сохранение результата в переменнойlength
. - К значению переменной
length
добавляется единица, чтобы учесть нулевой символ в итоговой строке. - С помощью
malloc
выделяется память под итоговую строку с учетом нулевого символа и с помощьюstrcpy
в эту память копируется пустая строка. - В цикле
for
начиная с 0 и доn
включительно, происходит добавление каждой строки к итоговой строке с помощью функцииstrcat
. - Функция
concat
возвращает указатель на итоговую строку. - В функции
main
создается временная строкаtemporary_string
с помощьюconcat
, указывая массивstring
и количество строк в нем. - С помощью
puts
временная строка выводится на экран. - В цикле
for
начиная с 0 и до 5 включительно, происходит освобождение памяти, выделенной под каждый элемент массиваstring
, с помощьюfree
. - Память, выделенная под временную строку, также освобождается с помощью
free
. - Команда
system(
pause)
приостанавливает выполнение программы до нажатия клавиши. - Функция
main
возвращает 0, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д