Работа с динамическим распределением памяти - C (СИ)
Формулировка задачи:
Нужно написать задачу с динамическим распределением памяти
Задача:Удалить из строки все запятые,предшествующие первой точке
хелп
Решение задачи: «Работа с динамическим распределением памяти»
textual
Листинг программы
#define MAXTEXT 100
#include <string.h>
#include <stdio.h>
#include <malloc.h>
void main(void)
{
char *string,c;
char *string_new;
int i,j,len,count;
string=(char*)malloc(MAXTEXT);
puts("Введите строку текста:"); gets(string);
len=strlen(string); /*длина исходной строки*/
/*в первом цикле считаем число запятых до первой точки*/
i=0;
count=0; /* счетчик запятых до первой точки */
while( (c=string[i]) != '.' && c != 0)
{
if(c==',') count++;
i++;
}
string_new=(char*)malloc(len-count+1);/*выделение памяти под новую строку без запятых*/
/*в втором цикле считаем число запятых до первой точки*/
i=0;
j=0;
while( (c=string[i]) != '.' && c != 0)
{
if(c != ',') string_new[j++]=c; /*если не запятая, то копируем символ в новую строку*/
i++;
}
string_new[j]=0;
strcat(string_new,&string[i]); /*копируем остатки строки начиная с точки в новую строку*/
puts("\nНовая строка:"); puts(string_new);
free(string_new);
free(string);
}
Объяснение кода листинга программы
- В начале кода определяются необходимые директивы и функции для работы с памятью и строками.
- Затем создаются переменные, которые будут использоваться в коде:
string- указатель на выделенную память для хранения строки ввода;c- переменная для хранения текущего символа;string_new- указатель на выделенную память для хранения новой строки;iиj- индексы для работы со строками;len- длина строки ввода;count- счетчик запятых до первой точки.
- Далее происходит выделение памяти под строку ввода с помощью функции
malloc, и пользователю предлагается ввести строку. - После ввода строки, с помощью функции
strlenопределяется её длина, которая сохраняется в переменнойlen. - Затем начинается первый цикл, который считает количество запятых до первой точки в строке.
- Во время первого цикла, если символ равен запятой, увеличивается счетчик
count. - После выхода из цикла, под новую строку выделяется память с помощью функции
malloc, учитывая количество запятых до первой точки в строке. - Второй цикл аналогичен первому, но вместо запятых в новую строку копируются все остальные символы.
- После выхода из второго цикла, в новую строку добавляется остаток строки начиная с точки с помощью функции
strcat. - Затем выводится новая строка.
- После использования указателей на память, они освобождаются с помощью функции
free.