Соединить три строки через пробел - C (СИ)
Формулировка задачи:
Есть несколько строк:str1="Today" str2="is" str3="05.05.16". Используя строковые функции получите новую строку str="Today is 05.05.16". И создать массив, элементами которого будут адреса каждого символа новообразованной строки. Решить задачу через указатели. на Си. Спасибо!
Решение задачи: «Соединить три строки через пробел»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { const char* str1 = "Today"; const char* str2 = "is"; const char* str3 = "05.05.16"; const char* stringDisplayFmt = "%s%c%s%c%s"; const char* arrDisplayFmt = "%s%02lu%s%p%c%c%c"; char** arr = NULL; char* iterator = NULL; char* s = malloc(128); sprintf(s, stringDisplayFmt, str1, ' ', str2, ' ', str3); printf("%s\n", s); arr = malloc(strlen(s) * sizeof(*arr)); iterator = s; while (*iterator != '\0') { arr[iterator - s] = iterator; iterator++; } iterator = s; while (*iterator != '\0') { printf(arrDisplayFmt, "a[", (size_t)(iterator - s), "] 0x", &arr[iterator - s], ' ', *arr[iterator - s], '\n'); iterator++; } free(arr); free(s); return 0; }
Объяснение кода листинга программы
- Программа подключает необходимые библиотеки для работы с памятью и строками.
- Объявляются константы строк, которые будут объединяться.
- Объявляется переменная
stringDisplayFmt
, которая содержит формат строки для вывода объединение трех строк с пробелами между ними. - Объявляется переменная
arrDisplayFmt
, которая содержит формат строки для вывода объединение трех строк с пробелами между ними и дополнительной информацией о памяти. - Объявляется указатель на массив строк
arr
. - Объявляется указатель на первый элемент массива
iterator
. - Выделяется память под строку
s
, которая будет использоваться для формирования итоговой строки. - Строка
s
заполняется с помощью функцииsprintf
с использованием форматаstringDisplayFmt
и констант строк. - Выводится итоговая строка с помощью функции
printf
. - Выделяется память под массив строк
arr
с использованием размера строкиs
. - Указатель
iterator
инициализируется значением указателяs
. - В цикле, пока не достигнут конец строки
s
, элементы массиваarr
заполняются указателями на соответствующие символы строкиs
. - Указатель
iterator
увеличивается на единицу после каждого заполнения элемента массиваarr
. - В цикле, пока не достигнут конец строки
s
, выводится информация о каждом элементе массиваarr
с использованием форматаarrDisplayFmt
. - Выделяется память под строку
s
освобождается. - Выделяется память под массив строк
arr
освобождается. - Программа возвращает ноль, что означает успешное завершение работы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д