Соединить три строки через пробел - 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освобождается. - Программа возвращает ноль, что означает успешное завершение работы.