Создание динамического массива строк - C (СИ)
Формулировка задачи:
Задача состоит в следующем: из массива строк нужно найти подстроки по заданному условию (например, наличие определенных символов) и записать их в новый динамический свободный массив, а потом распечатать каждую подстроку с новой строки. Скажите, пжлст, как это сделать?
Решение задачи: «Создание динамического массива строк»
textual
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #define N (256)
- unsigned short count=0;
- unsigned short Size_String(char* String)
- {
- unsigned short i=0;
- while(1)
- {
- if(String[i]=='\0')
- return i++;
- i++;
- }
- }
- // проверка присутствия символа который разделяет подстроки, например, точка, знак восклицание и т.д. и т.п.
- unsigned short Separator(char String)
- {
- if((String==',')||(String=='.')||(String=='!')|| (String==';')||(String=='?'))
- return 1;
- return 0;
- }
- void main_processing(char* String, char** Arr_String_Temp)
- {
- unsigned short j=0;
- short h = 0;
- unsigned short Swap = Size_String(String), Swap1 = Swap;
- Arr_String_Temp[count] = (char*)malloc((Swap+1)*sizeof(char));
- for(; j<Swap+1; j++,h++)
- {
- if(Separator(String[j])==1)
- {
- Arr_String_Temp[count][h] = String[j];
- Arr_String_Temp[count][h+1]='\0';
- count++;
- Swap1 = Swap1-Size_String(Arr_String_Temp[count-1]);
- Arr_String_Temp[count] = (char*)malloc((Swap1+1)*sizeof(char));
- h=-1;
- }
- else
- Arr_String_Temp[count][h] = String[j];
- }
- }
- int main()
- {
- char** Arr_String = (char**)malloc(N*sizeof(char*)); // масcив строк, создано 256 строк
- char** Arr_String_Temp = (char**)malloc(N*sizeof(char*));
- char* Temporary = (char*)malloc(N*sizeof(char));
- printf("%s","Введите строки что бы завершить введите 0 : \n");
- unsigned short i=0;
- unsigned short j=0;
- while(1)
- {
- gets(Temporary);
- if((Temporary[0]=='0')&&(Size_String(Temporary))==1)
- break;
- Arr_String[i] = (char*)malloc(Size_String((Temporary)+1)*sizeof(char));
- for(j=0; j<=Size_String(Temporary)+1; j++)
- {
- Arr_String[i][j] = Temporary[j];
- }
- main_processing(Arr_String[i],Arr_String_Temp);
- i++;
- }
- printf("%s","Введенные строки: \n");
- for(i=0;i<N;i++)
- {
- if(Arr_String[i]==NULL)
- break;
- printf("%s %s", Arr_String[i],"\n");
- }
- printf("%s","Их подстроки: \n");
- for(i=0;i<N;i++)
- {
- if(Arr_String_Temp[i]==NULL)
- break;
- printf("%s %s", Arr_String_Temp[i],"\n");
- }
- for(i=0; i<N; i++)
- {
- free(Arr_String[i]);
- free(Arr_String_Temp[i]);
- }
- free(Arr_String);
- free(Arr_String_Temp);
- free(Temporary);
- return 0;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д