Создание динамического массива строк - 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;
}