Так что я делаю программу, которая может взять слово с клавиатуры и выводить ее на испанский перевод, используя файл со всеми переводами. Сейчас я использую BST как свою функцию. В моем коде я использую strtok(), чтобы разбить строку, которая вводится из файла. Однако каждое слово имеет перед собой четыре случайных символа. Вот что у меня есть ...Переводчик с BST в C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 8001
// BST code
struct BSTnode{
char engWord[128], spanWord[1000];
struct BSTnode *left, *right;
};
struct BSTnode *root = NULL;
struct BSTnode *newBSTNode(char *engWord, char *spanWord){
struct BSTnode *newNode;
newNode = (struct BSTnode*)malloc(sizeof(struct BSTnode));
strcpy(newNode->engWord, engWord);
strcpy(newNode->spanWord, spanWord);
newNode->left = newNode->right = NULL;
return newNode;
}
void insert(char *engWord, char *spanWord){
struct BSTnode *parent, *current, *newnode = NULL;
int res = 0;
if(root == NULL){
root = newBSTNode(engWord, spanWord);
return;
}
for(current = root; current != NULL;
current = (res > 0)?current- >right:current->left){
res = strcasecmp(engWord, current->engWord);
parent = current;
}
newnode = newBSTNode(engWord, spanWord);
res > 0?(parent->right = newnode):(parent->left = newnode);
return;
}
void findEngWord(char *str){
struct BSTnode *temp = NULL;
int flag = 0, res = 0;
if(root == NULL){
printf("FAIL!!!!!!");
return;
}
temp = root;
int counter = 1;
while(temp){
if((res = strcasecmp(temp->engWord, str)) == 0){
printf("\t%s\n\t%d BST nodes", temp->spanWord, counter);
flag = 1;
break;
}
temp = (res > 0)?temp->left:temp->right;
counter++;
}
if(!flag)
printf("\t---NOT found (in BST)\n\t%d BST nodes", counter);
return;
}
void openFileBST(){
// open file
FILE* filePnt = fopen("Spanish.txt", "r");
char input[500], *first, *second;
// If file is invalid
if(filePnt == NULL){
printf("Could not open file. Termination Program...");
exit(0);
}
while(fgets(input, 500, filePnt) != NULL){
first = strtok(filePnt, "\t");
second = strtok(NULL, "\n");
// Test prints
printf("%s\n", &first);
printf("%s\n", &second);
insert(&first, &second);
}
fclose(filePnt);
}
void search(){
char *tempStr, exitStr = "-1";
// Ask user to input word
printf("Enter a word you want to have translated. (type -1 to exit)
\n-------------------------\n");
while(1){
printf("\n- ");
fgets(tempStr, 99, stdin);
// Failed exit statement
//if(strcmp(tempStr, exitStr) == 0){
// printf("test");
// break;
//}
findEngWord(&tempStr);
}
}
int main()
{
openFileBST();
search();
}
Из первых четырех символов я уверен, что я не могу правильно искать английское слово. Это что-то с моей функцией strtok или с моим кодом? Спасибо, ребята, за помощь заранее!
См. [Как заполнить минимальный, полный и проверенный пример] (/ help/mcve). –
В функции 'search' у вас есть' char * tempStr' и 'fgets (tempStr, 99, stdin);' Это будет работать неправильно, потому что 'tempStr' не инициализируется до его использования, поэтому он не указывает к действительной памяти. Чтобы исправить это, измените объявление на 'char tempStr [100]'. Кроме того, вызов 'findEngWord' должен быть' findEngWord (tempStr) 'без амперсанда. – user3386109
_Поскольку из первых четырех символов я уверен, что не могу правильно ..._ Сломанный выход не означает, что поиск не работает. Вы не должны принимать вещи, если можете легко протестировать их. И, пожалуйста, не публикуйте скриншоты вашего вывода. Просто скопировать текст гораздо удобнее для любого читателя. – Gerhardh