Open Mingun opened 4 years ago
Не заметил сначала -- list_char_alike
возвращает не список одинаковых элементов, а список всех элементов из _list_char
, которые начинаются с искомого слова. Что тем не менее не отменяет того, что при наличии в списке дубликатов (а они там возможны, т.к. они не удаляются) не все дубликаты будут обрабатываться. Возможно, проблема как раз в том, что в списке могут быть дубликаты
Данная фунция возвращает новый список, который состоит из одинаковых элементов, потому что она извлекает из сортированного списка некоторый элемент, равный искомому, и идет по списку до тех пор, пока элемент равен искомому: https://github.com/AndrewCrewKuznetsov/xneur-devel/blob/362019ac27f388b319b654d33ec3b1799339bf72/xneur/lib/misc/list_char.c#L224-L245 Однако, первый элемент может быть из любого элемента подмассива одинаковых элементов, это не обязательно самый первый элемент равный искомому, из сортированного списка: https://github.com/AndrewCrewKuznetsov/xneur-devel/blob/362019ac27f388b319b654d33ec3b1799339bf72/xneur/lib/misc/list_char.c#L54-L78
Единственное место использования этой функции -- в этом месте, где, похоже, значение имеет лишь количество элементов. Но из-за указанной особенности алгоритма, вероятно, это не то количество, которое нужно -- оно может быть меньше, чем нужно: https://github.com/AndrewCrewKuznetsov/xneur-devel/blob/362019ac27f388b319b654d33ec3b1799339bf72/xneur/lib/main/program.c#L2199-L2253
Из кода неочевидно, зачем вообще подсчитывать количество слов, на первый взгляд это мало на что влияет. Данное место нуждается в пристальном внимании