Segfault в программе на C++ ⇐ C++
-
Гость
Segfault в программе на C++
count_words.h
#ifndef _count_words_h_ #define _count_words_h_ #include #include #include класс CountWords { std::map countWords; общественность: СчетСлов(); ~CountWords(); int getCountWord(const std::string& word) const; int addWord(const std::string& word); const std::list& getMaxCountWord() const; const std::list& getMinCountWord() const; }; #endif // _count_words_h_ count_words.c
#include "count_words.h" CountWords::CountWords() {} CountWords::~CountWords() {} int CountWords::getCountWord(const std::string& word) const { if(countWords.find(word) != countWords.end()) { вернуть countWords.find(слово)->секунду; } еще { вернуть 0; } } int CountWords::addWord(const std::string& word) { вернуть ++countWords[слово]; } const std::list& CountWords::getMaxCountWord() const { std::list maxCountWords; интервал maxCount = 0; for(const auto& пара: countWords) { если (пара.секунда > maxCount) { maxCount = пара.секунда; } } for(const auto& пара: countWords) { если (пара.секунда == maxCount) { maxCountWords.push_back(пара); } } вернуть МаксКаунтСловс; } const std::list& CountWords::getMinCountWord() const { } parse_text.h
#ifndef _parse_text_h_ #define _parse_text_h_ #include #include #include #include класс ParseText { std::list слова; файл std::ifstream; статический int currentWord; void openFile(const std::string& fileName); недействительный анализФайл(); недействительный CloseFile(); общественность: ParseText() = удалить; ParseText(const std::string& fileName); ParseText(const std::string& fileName, unsigned long long maxWords); ~Парсетекст(); const std::string& getFirstWord() const; const std::pair& getNextWord() const; const std::string& getWordAt(int index) const; }; #endif // _parse_text_h_ parse_text.c
#include "parse_text.h" int ParseText::currentWord = 0; void ParseText::openFile(const std::string& fileName) { file.open(имя_файла); } void ParseText:: closeFile() { файл.закрыть(); } void ParseText::parseFile() { если(!file.is_open()) { throw std::runtime_error("не удалось открыть файл"); } станд::строковое слово; в то время как (файл >> слово) { слова.push_back(слово); } } ParseText::ParseText(const std::string& fileName) { openFile (имя файла); анализФайл(); } ParseText::ParseText(const std::string& fileName, unsigned long long maxWords) { openFile (имя файла); анализФайл(); if(maxWords =words.size()) { return std::make_pair(std::string(), true); } ++текущееСлово; bool isLastWord = (currentWord == word.size() - 1); авто это = word.begin(); std::advance(it, currentWord); return std::pair(*it, isLastWord); } const std::string& ParseText::getWordAt(int index) const { if(index < 0 || index >=words.size()) { throw std::out_of_range("индекс вне диапазона"); } авто это = word.begin(); std::advance(it, index); верни это; } main.c
#include "parse_text.h" #include "count_words.h" #include #include #include интервал основной() { std::string inputFileName = "text.txt"; std::string outputFileName = "result.txt"; const ParseText parseText(inputFileName); CountWords wordCounter; константный станд::строка& первоеСлово = parseText.getFirstWord(); wordCounter.addWord(первое слово); в то время как (истина) { const std::pair& wordInfo = parseText.getNextWord(); если (wordInfo.секунда) { перерыв; } const std::string& word = wordInfo.first; wordCounter.addWord(слово); } const std::list& maxCountWords = wordCounter.getMaxCountWord(); const std::list& minCountWords = wordCounter.getMinCountWord(); std::ofstream outputFile(outputFileName); если (outputFile.is_open()) { int wordNumber = 1; for (const auto& пара: maxCountWords) { выходной файл
count_words.h
#ifndef _count_words_h_ #define _count_words_h_ #include #include #include класс CountWords { std::map countWords; общественность: СчетСлов(); ~CountWords(); int getCountWord(const std::string& word) const; int addWord(const std::string& word); const std::list& getMaxCountWord() const; const std::list& getMinCountWord() const; }; #endif // _count_words_h_ count_words.c
#include "count_words.h" CountWords::CountWords() {} CountWords::~CountWords() {} int CountWords::getCountWord(const std::string& word) const { if(countWords.find(word) != countWords.end()) { вернуть countWords.find(слово)->секунду; } еще { вернуть 0; } } int CountWords::addWord(const std::string& word) { вернуть ++countWords[слово]; } const std::list& CountWords::getMaxCountWord() const { std::list maxCountWords; интервал maxCount = 0; for(const auto& пара: countWords) { если (пара.секунда > maxCount) { maxCount = пара.секунда; } } for(const auto& пара: countWords) { если (пара.секунда == maxCount) { maxCountWords.push_back(пара); } } вернуть МаксКаунтСловс; } const std::list& CountWords::getMinCountWord() const { } parse_text.h
#ifndef _parse_text_h_ #define _parse_text_h_ #include #include #include #include класс ParseText { std::list слова; файл std::ifstream; статический int currentWord; void openFile(const std::string& fileName); недействительный анализФайл(); недействительный CloseFile(); общественность: ParseText() = удалить; ParseText(const std::string& fileName); ParseText(const std::string& fileName, unsigned long long maxWords); ~Парсетекст(); const std::string& getFirstWord() const; const std::pair& getNextWord() const; const std::string& getWordAt(int index) const; }; #endif // _parse_text_h_ parse_text.c
#include "parse_text.h" int ParseText::currentWord = 0; void ParseText::openFile(const std::string& fileName) { file.open(имя_файла); } void ParseText:: closeFile() { файл.закрыть(); } void ParseText::parseFile() { если(!file.is_open()) { throw std::runtime_error("не удалось открыть файл"); } станд::строковое слово; в то время как (файл >> слово) { слова.push_back(слово); } } ParseText::ParseText(const std::string& fileName) { openFile (имя файла); анализФайл(); } ParseText::ParseText(const std::string& fileName, unsigned long long maxWords) { openFile (имя файла); анализФайл(); if(maxWords =words.size()) { return std::make_pair(std::string(), true); } ++текущееСлово; bool isLastWord = (currentWord == word.size() - 1); авто это = word.begin(); std::advance(it, currentWord); return std::pair(*it, isLastWord); } const std::string& ParseText::getWordAt(int index) const { if(index < 0 || index >=words.size()) { throw std::out_of_range("индекс вне диапазона"); } авто это = word.begin(); std::advance(it, index); верни это; } main.c
#include "parse_text.h" #include "count_words.h" #include #include #include интервал основной() { std::string inputFileName = "text.txt"; std::string outputFileName = "result.txt"; const ParseText parseText(inputFileName); CountWords wordCounter; константный станд::строка& первоеСлово = parseText.getFirstWord(); wordCounter.addWord(первое слово); в то время как (истина) { const std::pair& wordInfo = parseText.getNextWord(); если (wordInfo.секунда) { перерыв; } const std::string& word = wordInfo.first; wordCounter.addWord(слово); } const std::list& maxCountWords = wordCounter.getMaxCountWord(); const std::list& minCountWords = wordCounter.getMinCountWord(); std::ofstream outputFile(outputFileName); если (outputFile.is_open()) { int wordNumber = 1; for (const auto& пара: maxCountWords) { выходной файл
Мобильная версия