From 6dc10bafc806f288e0837e3fa0ea8180d314fa33 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 23 Nov 2023 15:54:23 +0600 Subject: [PATCH] String parsing function rework --- source/ubl-utils.c | 74 ++++++++++++++++++++++++++++++++++++---------- source/ubl-utils.h | 2 ++ 2 files changed, 61 insertions(+), 15 deletions(-) diff --git a/source/ubl-utils.c b/source/ubl-utils.c index 8fdd809..76c5204 100644 --- a/source/ubl-utils.c +++ b/source/ubl-utils.c @@ -673,6 +673,33 @@ char *yon_char_replace(char *source, char *find, char*replace){ return source; } +/**yon_char_parse(char *parameters, int *size, char *divider) + * [EN] + * Parses string [parameters], divided by [divider], + * then returns parsed string array and sets [size] to + * size of returned array +*/ +// char **yon_char_parse(char *parameters, int *size, char *divider){ +// char **string=NULL; +// int i=1; +// string=malloc(sizeof(char*)); +// char *paramline=yon_char_new(parameters); +// char *param; +// while ((param=yon_char_divide_search(paramline,divider,1))){ +// string=realloc(string,sizeof(char*)*i); +// string[i-1]=yon_char_new(param); +// i++; +// if (strcmp(param,paramline)==0) break; +// } +// // string=realloc(string,sizeof(char*)*i); +// // string[i-1]=yon_char_new(paramline); +// // i++; +// // printf("%d\n",i); +// *size=i-1; +// return string; + +// } + /**yon_char_parse(char *parameters, int *size, char *divider) * [EN] * Parses string [parameters], divided by [divider], @@ -681,23 +708,20 @@ char *yon_char_replace(char *source, char *find, char*replace){ */ char **yon_char_parse(char *parameters, int *size, char *divider){ char **string=NULL; - int i=1; - string=malloc(sizeof(char*)); + *size=0; char *paramline=yon_char_new(parameters); - char *param; - while ((param=yon_char_divide_search(paramline,divider,1))){ - string=realloc(string,sizeof(char*)*i); - string[i-1]=yon_char_new(param); - i++; - if (strcmp(param,paramline)==0) break; - } - // string=realloc(string,sizeof(char*)*i); - // string[i-1]=yon_char_new(paramline); - // i++; - // printf("%d\n",i); - *size=i-1; + char *param = strstr(paramline,divider); + for (;param;param=strstr(paramline,divider)){ + string = yon_remalloc(string,sizeof(char*)*((*size)+1)); + string[(*size)]=yon_char_divide(paramline,strlen(paramline)-strlen(param)); + *size=(*size)+1; + } + if (string){ + string = yon_remalloc(string,sizeof(char*)*((*size)+1)); + string[(*size)]=paramline; + (*size)+=1; + } return string; - } /**yon_char_parsed_rip(char **char_string, int *size, int item_to_delete) @@ -746,6 +770,26 @@ int yon_char_parsed_check_exist(char **parameters, int size, char *param){ return -1; } +/**yon_char_parsed_check_repeats(char **parameters, int size) + * [EN] + * Checks if [parameters] string array of length [size] + * has repeated elements; + * [RU] + * Проверяет есть ли в массиве строк [parameters], размера [size] + * повторения +*/ +int yon_char_parsed_check_repeats(char **parameters, int size){ + for (int i=0;i