[C언어]텍스트파일을 입력받아서 텍스트파일내 단어를 검색하는 프로그램입니다.
#include
#include
#include
#include
//문자열의 최대 길이
#define MAXLENGTH 30
//텍스트파일 이름의 최대 길이
#define MAXNAME 15
//단어의 갯수와 라인을 표시할 스택
struct Number{
int nFrequency;
int nLines;
};
typedef struct Number NUMBERS;
//트리노드 구조체
struct TreeNode{
char cData[MAXLENGTH];
NUMBERS *ptNumbers;
struct TreeNode *ptLeft;
struct TreeNode *ptRight;
};
typedef struct TreeNode TREENODE;
//트리 구조체
struct Tree{
int nTreeSize;
TREENODE *ptRoot;
};
typedef struct Tree TREE;
void initTree(TREE *ptTree);
void storeTree(TREE *ptTree, FILE *pfFile);
void storeTreeSub(TREE *ptTree, char *cWord);
void searchWord(TREE *ptTree, char strWord[]);
void main()
{
int i=0;
FILE *pfFile;
TREE *ptTree;
char strFileName[MAXNAME];
char strText;
char strWord[MAXLENGTH];
char cCommand;
ptTree = (TREE *)malloc(sizeof(TREE));
initTree(ptTree);
printf("File name(No file extension) : ");
gets(strFileName);
fflush(stdin);
strcat(strFileName, ".txt");
pfFile = fopen(strFileName, "r");
if(pfFile == NULL)
{
printf("file open error!\n");
return;
}
storeTree(ptTree, pfFile);
printf("=============================== Text File ===============================\n");
while(true)
{
strText = fgetc(pfFile);
if(strText == EOF) break;
putchar(strText);
}
printf("\n");
printf("=========================================================================\n");
fclose(pfFile);
printf("S : Search, Q : Quit\n");
do{
//커맨드 입력
printf("Command : ");
cCommand = getch();
cCommand = toupper(cCommand);
putch(cCommand);
printf("\n");
switch(cCommand)
{
case 'S' : //search
printf("Search Word : ");
gets(strWord);
fflush(stdin);
searchWord(ptTree, strWord);
break;
case 'Q' : //Quit
break;
default : //wrong command
printf("\nWrong command. Try again\n");
}
}while(cCommand != 'Q');
}
//트리 초기화
void initTree(TREE *ptTree)
{
ptTree->nTreeSize = 0;
ptTree->ptRoot = NULL;
}
//텍스트 파일을 트리에 저장
void storeTree(TREE *ptTree, FILE *pfFile)
{
char cWord[MAXLENGTH];
while(feof(pfFile))
{
int i = 0;
while(cWord[i] != '\n')
{
cWord[i] = fgetc(pfFile);
cWord[i] = tolower(cWord[i]);
if(cWord[i] == '\0')
storeTreeSub(ptTree, cWord);
i++;
}
}
}
//텍스트 파일을 트리에 저장하는 함수
void storeTreeSub(TREE *ptTree, char *cWord)
{
TREENODE *ptTempNode;
ptTempNode = (TREENODE *)malloc(sizeof(TREENODE));
ptTempNode->ptLeft = NULL;
ptTempNode->ptLeft = NULL;
strcpy(ptTempNode->cData, cWord);
//트리가 비어있는 경우
if(ptTree->nTreeSize = 0)
ptTree->ptRoot = ptTempNode;
printf("%s\n", ptTempNode->cData);
//트리에 자료가 있는 경우
}
일단 파일명을 입력받아서 텍스트파일의 내용을 출력하는 부분은 끝냈습니다만.
텍스트파일에 사용된 단어들을 이진트리에 저장하고 싶은데 이 부분이 잘 안되네요.
이 부분만 어떻게 처리하면 어떻게든 될거 같긴한데 말이죠...


댓글 달기