слова в массив записывает, но проблема, что если слово последнее и оно меньше 3 букв, то либо слово вообще не считывается, либо одна буква только
ты проблвал chatgpt юзать ?
ему он не поможет
Да, не помогает
Вот исправленная версия вашей функции: List_str *create_array(item_letter *ptr, int *len_array) { int len_array_buf = 0, flag_word = 0; List_str *arr = (List_str *) calloc(1, sizeof(List_str)); assert(arr); while (ptr) { if (strchr(DELIM, ptr->data) || !(ptr->next)){ if (flag_word == 1) { flag_word = 0; arr[len_array_buf - 1].end = ptr; } // Special case: check if the current node is the last node and the word is shorter than 3 characters if (!ptr->next && flag_word == 1 && arr[len_array_buf - 1].end == arr[len_array_buf - 1].start) { arr[len_array_buf - 1].end = ptr; } } else { if (flag_word == 0) { flag_word = 1; arr[len_array_buf].start = ptr; ++len_array_buf; arr = realloc(arr, (len_array_buf + 1) * sizeof(List_str)); assert(arr); } } ptr = ptr->next; } *len_array = len_array_buf; for (int i = 0; i < *len_array; ++i) { arr[i].len = 0; item_letter *buf_ptr = arr[i].start; while (buf_ptr != arr[i].end) { ++(arr[i].len); buf_ptr = buf_ptr->next; } if(arr[i].len == 1){ arr[i].end = arr[i].start; } if((arr[i].end) && arr[i].end ->data == ' ') { arr[i].end = arr[i].end->prev; } } arr = realloc(arr, (*len_array) * sizeof(List_str)); return arr; } Этот код проверяет, является ли текущий узел последним в списке и является ли слово короче трех символов, и если да, то устанавливает end этого узла в ptr, чтобы включить этот символ в слово.
давайка мы тут будем сами чатдцп польоватся, а не ты за нас
Обсуждают сегодня