譯者所以我正在製作一個程序,它可以從鍵盤輸入一個單詞並輸出西班牙語翻譯,使用帶有所有翻譯的文件。現在我使用BST作爲我的功能。在我的代碼中,我使用strtok()來分解從文件輸入的字符串。但是,每個單詞前面都有四個隨機字符。以下是我有...BST in 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