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

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


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

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

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