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