Help with this problem
and what is your current effort to code this? How far have you got? What issues are you having? Post your current code.
Based upon code from
https://cplusplus.com/forum/lounge/284112/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
#include <iostream>
#include <vector>
#include <fstream>
#include <algorithm>
#include <iterator>
#include <cctype>
#include <ranges>
namespace rngs = std::ranges;
auto get_words(std::istream& ifs) {
static constexpr char split { '-' };
std::vector<std::string> words;
for (std::string wrd; ifs >> wrd; ) {
std::string w;
rngs::copy_if(wrd, std::back_inserter(w), [](unsigned char ch) {return ch == split || std::isalpha(ch); });
for (const auto& word : rngs::split_view(w, split))
if (word.begin() != word.end())
words.emplace_back(word.begin(), word.end());
}
return words;
}
int main() {
std::ifstream ifs("test.txt");
if (!ifs)
return (std::cout << "Cannot open file\n"), 1;
constexpr size_t NoLet { 26 };
unsigned cnt[NoLet] {};
std::cout << "Starting letter count:\n";
for (const auto& w : get_words(ifs))
++cnt[static_cast<char>(std::toupper(static_cast<unsigned char>(w[0]))) - 'A'];
for (size_t l {}; l < NoLet; ++l)
if (cnt[l])
std::cout << static_cast<char>('A' + l) << ' ' << cnt[l] << '\n';
}
| |
Starting letter count:
A 4
B 2
D 1
G 2
I 1
M 2
O 1
R 1
S 1
T 6
W 2
|
where i can post the code? |
Here. Use code tags when posting code:
[code]
formatted code goes here
[/code]
|
... but can you understand and explain it?
If that was for a homework exercise, then...
Topic archived. No new replies allowed.