Skip to content

main.txt

#include <iostream>  
#include <fstream>  
#include <map>  
#include <set>  
#include <vector>  
using namespace std;  

void buildMap(string filename, int order, map<string, vector<char>> &markovMap);  

string generateText(map<string, vector<char>> &markovMap);  

int main() {  
    srand(time(0));  
    map<string, vector<char>> markovMap;  
    cout << "Hello, Markov Chain!" << endl;  
    cout << "Enter level (1-10):";  
    int level;  
    cin >> level;  
    cout << "Enter file name:";  
    string filename;  
    cin >> filename;  

    buildMap(filename, level, markovMap);  

    cout  
    << "Built Map!"  
    << endl  
    << endl  
    << "============"  
    << endl  
    << endl;  

    cout << generateText(markovMap) << endl;  

    // finish this up  
    return 0;  
}  


void buildMap(string filename, int order, map<string, vector<char>> &markovMap){  
    ifstream f(filename);  

    if (!f.is_open()){  
        cout << "Error opening file " << filename << endl;  
        return;  
    }  

    string key = "";  
    char c;  
    while (f>> noskipws >> c){  
        if (key.length() < order){  
            key += c;  
        } else {  
            markovMap[key].push_back(c);  
            key = key.substr(1) + c;  
        }  
    }  
}  

string generateText(map<string, vector<char>> &markovMap){  
    string output = "";  
    string key = "";  
    auto iter = markovMap.begin();  
    advance(iter, rand() % markovMap.size());  
    key = iter->first;  
    output += key;  
    int sentences = 0;  
    while (sentences < 5){  
        char c = markovMap[key][rand() % markovMap[key].size()];  
        output += c;  
        if (c == '.' || c == '?' || c == '!'){  
            sentences++;  
        }  
        key = key.substr(1) + c;  
    }  
    return output;  
}