2016-05-14 64 views
0

我有一个程序分析文本文件中不同词和总词的数量,然后将其写入新的输出文件。我有第一部分,但我不知道如何让我的打印功能打印到新的文本文件。将全部单词或不同单词打印到新文件上,但Print2()函数似乎不起作用。请看// POINT OF INTEREST //部分,我认为问题源于此。使用打印功能输出到一个新文件

#include <iostream> 
#include <fstream> 
#include <string> 
#include <cctype> 
int distinctWord = 0; 
using namespace std; 

typedef int ItemType; 

struct Node { 
    string word; 
    int count = 1; 
    Node* left; 
    Node* right; 
}; 

class TreeType { 
private: 
    Node* root; 
    void Insert(Node*& root, string word); 
    void Destroy(Node*& root); 
    void PrintTree(Node* root); 
    void Print2File(Node* root, ofstream& fout); 
public: 
    TreeType() {root = nullptr;} 
    ~TreeType(); 
    void PutItem(string word); 
    void Print(); 
    void Print2(ofstream& fout); 
}; 

void TreeType::Print() { 
    PrintTree(root); 
    cout << endl; 
} 

void TreeType::PrintTree(Node* root) { 
    if (root == nullptr) 
     return; 
    PrintTree(root->left); 
    cout << root->word << " " << root->count << endl; 
    PrintTree(root->right); 
} 
///////////////POINT OF INTEREST/////////////////////////// 
///////////////POINT OF INTEREST/////////////////////////// 

void TreeType::Print2File(Node* root, ofstream& fout){ 
    if (root == nullptr) 
     return; 
    PrintTree(root->left); 
    fout << root->word << " " << root->count << endl; 
    PrintTree(root->right); 
} 

void TreeType::Print2(ofstream& fout) { 
    Print2File(root, fout); 
    cout << "Printed to another file" << endl; 
} 

///////////////POINT OF INTEREST/////////////////////////// 
///////////////POINT OF INTEREST/////////////////////////// 

void TreeType::PutItem(string word) { 
    Insert(root, word); 
} 

void TreeType::Insert(Node*& root, string word) { 
    if (root == nullptr) { 
     root = new Node; 
     distinctWord++; 
     root->word = word; 
     root->right = nullptr; 
     root->left = nullptr; 
     return; 
    } 
    if(root->word == word){ 
     root->count++; 
     return; 
    }else if (word < root->word) 
     Insert(root->left, word); 
    else 
     Insert(root->right, word); 
} 

TreeType::~TreeType() { 
    Destroy(root); 
} 

int main(int argc, const char * argv[]) { 
    int totalwords = 0; 
    ifstream file; 
    string word; 
    char c; 
    ofstream fout; 

    ifstream file; 
    string filename; 
    cout << "Enter name of file with text to analyze: "; 
    cin >> filename; 
    fin.open(filename.c_str()); 
    if (fin.fail()) { 
     cout << "Error opening file.\n"; 
     exit(1); 
    } 
    cout << "\nAnalyzing " << filename << ".\n"; 

    TreeType t; 

    while(!file.eof()){ 
     file.get(c); 

     if(isalpha(c) || c == '\''){ 
      word += c; 
      c = '\0'; 
     }else if(c == ' ' || c == '\n' || c == '-' || c == '.'){ 
      if(isalpha(word[0])){ 
       transform(word.begin(), word.end(), word.begin(), ::tolower); 
       t.PutItem(word); 
       totalwords++; 
       word = ""; 
       c = '\0'; 
      } 
     } 

    }if(isalpha(word[0])){ 
     transform(word.begin(), word.end(), word.begin(), ::tolower); 
     t.PutItem(word); 
     totalwords++; 
    } 

    file.close(); 
    fout.open("results.txt"); 
    cout << "\nWord counts:\n\n"; 
    t.Print(); 
    t.Print2(fout); 
    cout << "\nTotal number of words in text: " << totalwords << ".\n"; 
    fout << "\nTotal number of words in text: " << totalwords << ".\n"; 
    cout << "Number of distinct words appearing in text: " 
     << distinctWord << ".\n"; 
    fout << "Number of distinct words appearing in text: " 
     << distinctWord << ".\n"; 
    fout.close(); 
    return 0; 
} 
+0

所有呼叫者什么是你的输入。你的预期产出是多少?你得到什么输出? – bashrc

+0

这是很多代码。其中大部分可能与您的问题无关。请尝试创建一个可以向我们显示的[** Minimal **,Complete和Verifiable示例](http://stackoverflow.com/help/mcve)。 –

回答

2

你将有你的输出文件流传递到您的 PrintTree(root);了。

现在您正在打印到cout,它将转储所有应用程序与您的应用程序关联的任何控制台。

添加ofstream参数后,修改函数变为:

void TreeType::PrintTree(Node* root, ofstream &fout) { 
    if (root == nullptr) 
     return; 
    PrintTree(root->left, fout); 
    fout << root->word << " " << root->count << endl; 
    PrintTree(root->right, fout); 
} 

您将需要通过ofstream对象遍及的PrintTree

+0

我爱你的男人。 – Ammar