2014-02-27 104 views
0

我想從單個輸入文件創建多個二進制樹。輸入文件如下所示:從輸入文件讀取單個字符時遇到問題

ABCDEFG 

JUHSKDHFG 

HDSNURHLNF 

JNDKFJBJNF 

每行代表一棵不同的樹,所以我必須單獨讀入每個字符。我現在的代碼只讀取每行的第一個字母,並從第一個字母中創建一個樹。我如何將整行讀成一棵樹,然後從下一行再次開始?

這是我現在所擁有的代碼:

int main() 
    { 
     BinaryTree <char> BT; 
     char ch; 
     string line; 
     ifstream myfile("input.txt"); 
     if (myfile.is_open()) 
     { 
      while(getline(myfile, line) 
      { 
       while(myfile.get(ch)) 
       { 
        BT.InsertData(ch); 
        if(ch = '\n') 
         break; 
       } 
      }  
      cout << "Preorder: "; 
      BT.PrintPreorder(); 
      cout << endl; 
      cout << "Inorder: "; 
      BT.PrintInorder(); 
      cout << endl; 
      cout << "Postorder: "; 
      BT.PrintPostorder(); 
      cout << endl; 
      cout << "Reverse Inorder: "; 
      BT.PrintReverseInorder(); 
      cout << endl;  
      BT.PrintPrintTree(); 
      cout << endl;  
      myfile.close(); 
     } 
     return 0; 
    } 
+1

還有......?一個問題?您是否打算忽略實際數據的每一行,並使用一個換行符完成每個外循環傳遞?根據你的輸入數據,看起來會發生什麼。 – WhozCraig

回答

0

嘗試一些更喜歡這個:

int main() 
{ 
    string line; 
    ifstream myfile("input.txt"); 
    if (myfile.is_open()) 
    { 
     while (getline(myfile, line)) 
     { 
      if (line.empty()) 
       continue; 

      BinaryTree <char> BT; 
      for(string::iterator iter = line.begin(); iter != line.end(); ++iter) 
       BT.InsertData(*iter); 

      cout << "Preorder: "; 
      BT.PrintPreorder(); 
      cout << endl; 
      cout << "Inorder: "; 
      BT.PrintInorder(); 
      cout << endl; 
      cout << "Postorder: "; 
      BT.PrintPostorder(); 
      cout << endl; 
      cout << "Reverse Inorder: "; 
      BT.PrintReverseInorder(); 
      cout << endl;  
      BT.PrintPrintTree(); 
      cout << endl;  
     }  
    } 
    return 0; 
} 
+0

這正是我需要的!非常感謝你 ! – user3335367

相關問題