OAIP/lab26/TextProcessingDict/DictSortedArray.c
2024-12-06 20:08:12 +04:00

82 lines
1.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <stdlib.h>
#include "Dict.h"
#ifdef DICT_SORTED_ARRAY_C
#define MAX_WORDS 10000
// Слова
char words[MAX_WORDS][MAX_LEN_WORD];
// Количество слов в словаре
int numWords = 0;
/* CREATE - создает словарь.
Вызывается перед началом использования словаря. */
void Create() {
numWords = 0;
}
/* DESTROY - уничтожает словарь.
Вызывается после окончания использования словаря. */
void Destroy() {
numWords = 0;
}
/*
INSERT добавляет элемент в множество.
Множество содержит только уникальные элементы.
При повторном добавлении элемента в множество, множество не изменяется.
*/
void Insert(char* word) {
// Начиная с конца массива ищется место куда нужно вставить слово
// Вставка делается в отсортированный массив
// Вставка делается так, чтобы после вставки массив был отсортирован
int i = numWords;
while ((i > 0) && (strcmp(word, words[i - 1]) < 0)) {
strcpy(words[i], words[i - 1]);
i--;
}
strcpy(words[i], word);
++numWords;
}
/*
MEMBER сообщает, является ли указанный элемент членом данного множества или нет.
Если является - возвращает 1, иначе - возвращает 0
*/
int Member(char* word) {
// Используется алгоритм бинарного поиска слова в отсортированном массиве
if (bsearch(word, words, numWords, sizeof(char), strcmp)) {
return 1;
}
else {
return 0;
}
/*
int left = 0;
int right = numWords - 1;
while (left <= right) {
int middle = (left + right) / 2;
int dif = strcmp(words[middle], word);
if (dif == 0) {
return 1;
}
else if (dif < 0) {
left = middle + 1;
}
else if (dif > 0) {
right = middle - 1;
}
}
return 0;*/
}
#endif