私はキーボードから単語を取り出し、すべての翻訳ファイルを使ってスペイン語の翻訳を出力するプログラムを作っています。今は私の機能としてBSTを使用しています。私のコードでは、ファイルから入力されている文字列を分割するためにstrtok()を使用します。しかし、すべての単語の前に4つのランダムな文字があります。ここで私が持っているものである...ここで翻訳者がCでBSTを使用する
#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();
}
はので、私は私が正しく英語の単語を検索することができないかなり確信している最初の4つの文字の私の出力
の写真です。私のstrtok関数、または私のコードで何か?あらかじめ助けてくれてありがとう!
[最小限の、完全で検証可能な例を完成させる方法](/ help/mcve)を参照してください。 –
'search'関数では、' char * tempStr'と 'fgets(tempStr、99、stdin); 'を持っています;' tempStr'は使用前に初期化されていないので正しく動作しません。有効なメモリに転送します。これを修正するには、宣言を 'char tempStr [100]'に変更します。また、 'findEngWord'の呼び出しはアンパサンドなしで' findEngWord(tempStr) 'でなければなりません。 – user3386109
_最初の4文字のため、私は正しくできないと確信しています... _壊れた出力は、検索が機能しないという意味ではありません。あなたが簡単にテストできるなら、あなたは物事を引き受けるべきではありません。そして、あなたの出力のスクリーンショットを投稿しないでください。テキストをコピーするだけで、どのリーダーにとっても便利です。 – Gerhardh