Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <algorithm>
- #include <iterator>
- #include <map>
- #include <sstream>
- #include <memory>
- int main()
- {
- std::ifstream input("C:\\arm250\\asd.txt", std::ios::binary);
- std::map<char, std::map<char, int>> charactersMap;
- auto prevValue = std::make_pair(false, char());
- std::for_each(
- std::istreambuf_iterator<char>(input),
- std::istreambuf_iterator<char>(),
- [&](char in)
- {
- if (prevValue.first)
- {
- auto frequencyMap = &charactersMap[prevValue.second];
- int freqCount = (*frequencyMap)[in];
- (*frequencyMap)[in] = ++freqCount;
- }
- else charactersMap.insert(std::make_pair(in, std::map<char, int>()));
- prevValue = std::make_pair(true, in);
- });
- std::transform(std::begin(charactersMap), std::end(charactersMap), std::ostream_iterator<std::string>(std::cout, ""),
- [](std::pair<char, std::map<char, int>> freq)
- {
- std::stringstream output;
- int characterTotal = 0;
- std::for_each(std::begin(freq.second), std::end(freq.second),
- [&](std::pair<char, int> freqChar)
- {
- output << freq.first << "->" << freqChar.first << ": " << freqChar.second << std::endl;
- characterTotal += freqChar.second;
- });
- output << freq.first << ": " << characterTotal << std::endl;
- return output.str();
- });
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement