Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <stdbool.h>
- #define COUNT 10
- FILE *f;
- char *name = "my_file";
- struct tnode { // узел дерева
- char *word; // указатель на строку (слово)
- struct tnode *left; // левый потомок
- struct tnode *right; // правый потомок
- };
- struct tnode *root;
- struct tnode *addtree(struct tnode *root, char *w) { //функция создания дерева
- int cond;
- if (root == NULL) { //если корня нет
- root = (struct tnode *)malloc(sizeof(struct tnode)); //выделение памяти на корень
- root->word = strdup(w); //запись значения в корень
- root->left = root->right = NULL; //приравнивание левой и правой ветки нулю
- }
- else if (cond = strcmp(w, root->word) < 0) //если корень есть, то сравнивает слово с корнем
- root->left = addtree(root->left, w); //добавляет его в левую ветку
- else
- root->right = addtree(root->right, w); //добавляет его в правую ветку
- return root;
- }
- void print2DUtil(struct tnode *root, int space) //функция вывода дерева
- {
- if (root == NULL) {
- return;
- }
- space += COUNT;
- print2DUtil(root->right, space);
- printf("\n");
- for (int i = COUNT; i < space; i++) {
- printf(" ");
- }
- printf("%s\n", root->word);
- print2DUtil(root->left, space);
- }
- void Read(){ //функция чтения с текстового файла и построения дерева
- char *typ[5]; //массив с основными типами идентификаторов
- typ[0] = "char";
- typ[1] = "int";
- typ[2] = "float";
- typ[3] = "double";
- typ[4] = "bool";
- char *p, *temp[255], tmp[255]; //временные переменные
- int n = 0, k = 0; //переменная счетчиков
- char *hram[255]; //переменная куда записываются данные
- int w = 0, val[255][255];
- root =NULL;
- char str[255];
- f = fopen("/Users/andrew/Desktop/Прога/LAB 7 Kovaluk/LAB 7 Kovaluk/my_file.txt", "r"); //открываем файл
- if (f = fopen("/Users/andrew/Desktop/Прога/LAB 7 Kovaluk/LAB 7 Kovaluk/my_file.txt", "r")) {
- while (!feof(f)) { //пока не конец файла - считываем данные
- fgets(str, 255, f);
- n = 0;
- k = 0;
- p = strtok(str, " ;[]*-&)(,+_?=><"); //отсекаем лишние символы
- for (int i = 0; i < strlen(p); i++) {
- if (p[i] != '\t') {
- tmp[k] = p[i];
- k++;
- }
- }
- tmp[k] = '\0';
- p = strdup(tmp);
- while (p) {
- temp[n] = strdup(p);
- n++;
- p = strtok(NULL, " ;[]*-&)(,+_?=><");
- }
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < 5; j++) {
- if (strcmp(temp[i], typ[j]) == 0) {
- hram[w] = strdup(temp[i + 1]);
- w++;
- }
- }
- }
- }
- for (int i = 0; i < w; i++) {
- for (int j = 0; j < w; j++) {
- if (strcmp(hram[i], hram[j]) == 0 && i != j) {
- for (int k = j; k < w; k++) {
- hram[k] = (hram[k + 1]);
- }
- w--;
- }
- }
- }
- rewind(f); //переходим к началу файла
- int str_num = 0;
- int shet[255];
- for (int i = 0; i<255; i++)
- {
- shet[i] = 0;
- }
- bool flag = 0; //переменная флага
- while (!feof(f)) {
- fgets(str, 255, f);
- str_num++;
- n = 0;
- k = 0;
- p = strtok(str, " ;[]*-&)(,+_?=><");
- for (int i = 0; i < strlen(p); i++) {
- if (p[i] != '\t') {
- tmp[k] = p[i];
- k++;
- }
- }
- tmp[k] = '\0';
- p = strdup(tmp);
- while (p) {
- temp[n] = strdup(p);
- n++;
- p = strtok(NULL, " ;[]*-&)(,+_?=><");
- }
- for (int i = 0; i < n; i++) {
- for (int l = 0; l < w; l++) {
- if (strcmp(temp[i], hram[l]) == 0) {
- //val[l]++;
- val[l][shet[l]] = str_num;
- flag = 1;
- shet[l]++;
- break;
- }
- }
- if (flag == 1){
- break;
- }
- }
- flag = 0;
- }
- char *identificator[256];
- char *kolichestvo;
- char strr[20];
- printf("Readed from file: \n");
- for (int i = 0; i < w; i++)
- { //вывод идентификатора, и места, где встречается
- printf("%s-", hram[i]);
- identificator[i] = hram[i];
- for (int j = 0; j<shet[i]; j++)
- {
- printf("%d, ", val[i][j]);
- sprintf(strr, "% d ", val[i][j]);
- kolichestvo = strr;
- strncat(identificator[i], kolichestvo, 128);
- }
- printf("\n");
- root = addtree(root, identificator[i]); //добавление ветки с идентификатором
- }
- }
- else {
- printf("File not found"); //ошибка открытия файла
- }
- }
- int main(){
- printf("LAB: 7 Binary tree of search\nBershadskiy Andrew \nIS-81\n ");
- int key;
- system("pause");
- while (true)
- {
- start:
- //system("cls");
- printf("\n\t MENU \n\n"); //меню
- printf("1.Read from file and display tree\n");
- printf("2.Exit\n\n");
- printf("Choose option:");
- scanf("%d", &key);
- switch (key)
- {
- case 1:{
- //system("cls");
- Read();
- printf("\nTree\n");
- treeprint(root);
- print2DUtil(root, 0);
- getchar();
- }
- goto start;
- case 2:{
- printf("Goodbye!\n");
- getchar();
- return 0;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement