2014-03-30 5 views
1

텍스트 파일의 단어를 읽고이를 이진 트리에 삽입하는 프로그램을 작성하려고합니다. 단어가 10자를 초과하면 단어는 10 자로 잘라집니다. 나는이 프로그램을 실행하는 데 정말로 가깝다고 느끼지만, 프로그램을 실행할 때 충돌이 발생하고 오류가 발생하지 않습니다. 필자는 정수로 이진 탐색 트리를 테스트했으며 작동합니다. 또한 이진 트리에 넣지 않고 텍스트 파일에서 단어를 읽는 방법도 테스트 해 보았습니다. 하지만 두 가지를 융합 할 때 그게 내가 문제가되는 곳입니다. 또한 텍스트 파일의 끝은 "#"로 표시됩니다. 그냥 이렇게 휴식; 말이된다.이진 검색 트리의 텍스트 파일에서 C++ 입력 단어

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 

struct Node{ 
    string data; 
    Node* left; 
    Node* right; 
}; 

Node* GetNewNode(string data){ 
    Node* newNode = new Node(); 
    newNode->data=data; 
    newNode->left = newNode->right = NULL; 
} 

Node* Insert(Node* rootPtr,string data){ 
    if(rootPtr == NULL){ 
     rootPtr = GetNewNode(data); 
     return rootPtr; 
    } 
    else if(data<= rootPtr->data){ 
     rootPtr->left = Insert(rootPtr->left,data); 
    } 
    else { 
     rootPtr->right = Insert(rootPtr->right,data); 
    } 
    return rootPtr; 
} 

int main() { 
string word; 
ifstream inFile; 
Node* rootPtr = NULL; // Pointer to the root node 

inFile.open("example.txt"); 
if (!inFile) { 
cout << "Unable to open text file"; 
} 

while (inFile >> word) { 
    rootPtr = Insert(rootPtr,word.substr(0,10)); 
    if (word == "#") 
     break; 
} 

inFile.close(); 
} 

입력 해 주셔서 감사합니다.

+0

방금 ​​프로그램에 무슨 문제가 있는지 파악했습니다. 데이터를 정렬 할 때 무엇을해야할지 잘 모릅니다. 한 단어가 다른 단어보다 큰지는 알 수 없습니다. 나는 우리가 개, 고양이, 물고기의 세 단어를 가지고 있다면 이것을 사전 순으로 놓으려고합니다. 개가 루트 노드가되고 고양이는 왼쪽 자식이되고 물고기는 올바른 자식이됩니다. – Nick

답변

1

newNodeGetNewNode에서 반환해야합니다.

또한 "#"을 원하지 않는 한 단어를 삽입하기 전에 #을 확인해야합니다.

+0

그래서 내가 분명히 드러내지 않는 한 가지는, 어떻게 단어를 정리하는 것입니까? 알파벳순으로 처리하고 있다고 생각하십니까? 아니면 단어의 크기 (바이트)에 따라 영향을 미치나요? – Nick

+0

'std :: string'의 <= 연산자를 사용하기 때문에 알파벳순으로 표시됩니다. –

관련 문제