これが現在の私のコードです。現在、テキスト ファイルを読み込んでいるときに発生する単語番号を返しています。必要なことは、単語が存在する行番号を返し、コンソールに返す各単語の横にこれを出力することです。したがって、「hello world」ではなく、hello - 1 world -2、i need - hello -1 world -1 のように表示されます。
これを行う方法を理解するのに助けが必要です。
#include <stdio.h>
#include <string>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <sstream>
#include <istream>
#include <conio.h>
struct node
{
int key_value, lineNumber;
char *word;
struct node *left,*right;
};
struct node *inserttree(struct node *tree,char *s, int lineNumber)
{
int i;
if (tree==NULL)
{
if ( ( tree = (struct node *) malloc( sizeof(struct node) ) ) !=NULL)
{
if ((tree->word=(char *) malloc(strlen(s)+1))==NULL)
{
free(tree);
tree=NULL;
}
else
{
tree->left=NULL;
tree->right=NULL;
strcpy(tree->word,s);
tree->lineNumber = lineNumber ;
}
}
}
else if ((i=strcmp(tree->word,s))>0)
{
tree->left=inserttree(tree->left,s, lineNumber);
}
else if (i<0)
{
tree->right=inserttree(tree->right,s, lineNumber);
}
return tree;
}
void printtree(struct node *tree)
{
if (tree!=NULL)
{
printtree(tree->left);
printf("%s %d\n",tree->word, tree->lineNumber);
printtree(tree->right);
}
}
//int search(struct node *tree)
//{
// int key;
// tree->right->key_value = key;
// return key;
//}
void freetree(struct node *tree)
{
if (tree!=NULL)
{
free(tree->word);
freetree(tree->left);
freetree(tree->right);
free(tree);
}
}
int main(void)
{
FILE *f;
char s[1024]; /*assumes a word cannot be longer than 1023 chars*/
struct node *tree=NULL;
int line = 1;
if ((f=fopen("Test.txt","r"))==NULL)
printf("Unable to open Test.txt\n");
else
{
while (fscanf(f,"%1023s",s)!=EOF)
tree=inserttree(tree,s, line++);
fclose(f);
printtree(tree); //moved from inserttree
freetree(tree);
}
system("pause");
return 0;
}