Работа с динамическим распределением памяти - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д