Создание динамического массива строк - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Задача состоит в следующем: из массива строк нужно найти подстроки по заданному условию (например, наличие определенных символов) и записать их в новый динамический свободный массив, а потом распечатать каждую подстроку с новой строки. Скажите, пжлст, как это сделать?

Решение задачи: «Создание динамического массива строк»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N (256)
  4.  
  5. unsigned short count=0;
  6.  
  7. unsigned short Size_String(char* String)
  8. {
  9.     unsigned short i=0;
  10.     while(1)
  11.     {
  12.         if(String[i]=='\0')
  13.             return i++;
  14.         i++;
  15.     }
  16. }
  17. // проверка присутствия символа который разделяет подстроки, например, точка, знак восклицание и т.д. и т.п.
  18. unsigned short Separator(char String)
  19. {
  20.     if((String==',')||(String=='.')||(String=='!')|| (String==';')||(String=='?'))
  21.         return 1;
  22.     return 0;
  23. }
  24.  
  25. void main_processing(char* String, char** Arr_String_Temp)
  26. {
  27.     unsigned short j=0;
  28.     short h = 0;
  29.     unsigned short Swap = Size_String(String), Swap1 = Swap;
  30.     Arr_String_Temp[count] = (char*)malloc((Swap+1)*sizeof(char));
  31.  
  32.     for(; j<Swap+1; j++,h++)
  33.     {
  34.  
  35.         if(Separator(String[j])==1)
  36.         {
  37.             Arr_String_Temp[count][h] = String[j];
  38.             Arr_String_Temp[count][h+1]='\0';
  39.             count++;
  40.             Swap1 = Swap1-Size_String(Arr_String_Temp[count-1]);
  41.             Arr_String_Temp[count] = (char*)malloc((Swap1+1)*sizeof(char));
  42.             h=-1;
  43.         }
  44.         else
  45.             Arr_String_Temp[count][h] = String[j];
  46.     }
  47. }
  48.  
  49. int main()
  50. {
  51.     char** Arr_String = (char**)malloc(N*sizeof(char*)); // масcив строк, создано 256 строк
  52.     char** Arr_String_Temp = (char**)malloc(N*sizeof(char*));
  53.     char*  Temporary = (char*)malloc(N*sizeof(char));
  54.  
  55.     printf("%s","Введите строки что бы завершить введите 0 : \n");
  56.     unsigned short i=0;
  57.     unsigned short j=0;
  58.     while(1)
  59.     {
  60.         gets(Temporary);
  61.         if((Temporary[0]=='0')&&(Size_String(Temporary))==1)
  62.             break;
  63.         Arr_String[i] = (char*)malloc(Size_String((Temporary)+1)*sizeof(char));
  64.         for(j=0; j<=Size_String(Temporary)+1; j++)
  65.         {
  66.             Arr_String[i][j] = Temporary[j];
  67.         }
  68.         main_processing(Arr_String[i],Arr_String_Temp);
  69.         i++;
  70.     }
  71.  
  72.     printf("%s","Введенные строки: \n");
  73.     for(i=0;i<N;i++)
  74.     {
  75.         if(Arr_String[i]==NULL)
  76.             break;
  77.         printf("%s %s", Arr_String[i],"\n");
  78.     }
  79.  
  80.  
  81.     printf("%s","Их подстроки: \n");
  82.     for(i=0;i<N;i++)
  83.     {
  84.         if(Arr_String_Temp[i]==NULL)
  85.             break;
  86.         printf("%s %s", Arr_String_Temp[i],"\n");
  87.     }
  88.  
  89.     for(i=0; i<N; i++)
  90.     {
  91.         free(Arr_String[i]);
  92.         free(Arr_String_Temp[i]);
  93.     }
  94.     free(Arr_String);
  95.     free(Arr_String_Temp);
  96.     free(Temporary);
  97.     return 0;
  98. }

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


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

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

6   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы