Работа с динамическим распределением памяти - 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);
}

Объяснение кода листинга программы

  1. В начале кода определяются необходимые директивы и функции для работы с памятью и строками.
  2. Затем создаются переменные, которые будут использоваться в коде:
    • string - указатель на выделенную память для хранения строки ввода;
    • c - переменная для хранения текущего символа;
    • string_new - указатель на выделенную память для хранения новой строки;
    • i и j - индексы для работы со строками;
    • len - длина строки ввода;
    • count - счетчик запятых до первой точки.
  3. Далее происходит выделение памяти под строку ввода с помощью функции malloc, и пользователю предлагается ввести строку.
  4. После ввода строки, с помощью функции strlen определяется её длина, которая сохраняется в переменной len.
  5. Затем начинается первый цикл, который считает количество запятых до первой точки в строке.
  6. Во время первого цикла, если символ равен запятой, увеличивается счетчик count.
  7. После выхода из цикла, под новую строку выделяется память с помощью функции malloc, учитывая количество запятых до первой точки в строке.
  8. Второй цикл аналогичен первому, но вместо запятых в новую строку копируются все остальные символы.
  9. После выхода из второго цикла, в новую строку добавляется остаток строки начиная с точки с помощью функции strcat.
  10. Затем выводится новая строка.
  11. После использования указателей на память, они освобождаются с помощью функции free.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.182 из 5
Похожие ответы