#include "OutputProcessor.h" #include #include #include OutputProcessor::OutputProcessor() { _fileOut = std::ofstream(); _allWords = std::vector(); _uniqueWords = std::vector(); _letterCounts = std::vector(26, 0); _wordCounts = std::vector(); _totalLetterCount = 0; _totalWordCount = 0; } void OutputProcessor::analyzeWords(std::vector allWords, std::string punctuation) { // Iterate over all words, processing incrementally for (size_t wordIdx = 0; wordIdx < allWords.size(); wordIdx++) { std::string& word = allWords.at(wordIdx); // Remove punctuation from word size_t punctuationIdx = 0; while ((punctuationIdx = word.find_first_of(punctuation)) != std::string::npos) { word.erase(punctuationIdx, 1); } // Save word internally _allWords.push_back(word); // Check all unique words for a match, and if so increment the count bool foundUnique = false; for (size_t uniqueWordIdx = 0; uniqueWordIdx < _uniqueWords.size(); uniqueWordIdx++) { if (_uniqueWords.at(uniqueWordIdx) == word) { _wordCounts.at(uniqueWordIdx)++; foundUnique = true; } } // If no unique word exists, add it to both vectors if (!foundUnique) { _uniqueWords.push_back(word); _wordCounts.push_back(1); } // Add letter count for each letter in the word for (size_t letterIdx = 0; letterIdx < word.length(); letterIdx++) { char letter = word.at(letterIdx); // Normalize to uppercase if (letter >= 'a' && letter <= 'z') { letter -= 32; } // Subtracting an uppercase letter by 65 creates its alphabetical // index letter -= 65; _letterCounts.at(letter)++; } // Sum total letter count _totalLetterCount += word.length(); // Increment total word count _totalWordCount++; } } bool OutputProcessor::openStream() { std::string file; std::cout << "What is the name of the file you would like to write to? "; std::cin >> file; if (std::cin.fail()) { std::cout << "Invalid file input"; return false; } _fileOut.open(file); if (_fileOut.fail()) { std::cout << "Unable to open file, does it exist?" << std::endl; return false; } return true; } void OutputProcessor::closeStream() { _fileOut.close(); } void OutputProcessor::write() { // TODO }