2014-02-27 37 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

相关问题