Подсчитать кол-во символов в тексте
Нужно подсчитать именно сколько букв и символов
a-125
n-18
b-60
также пробел и цифры.
#include <iostream>
#include <fstream>
#include <iterator>
//для windows не подсчитывается символ '\r', только '\n'
bool load_info(const char* filename, size_t& lines, size_t& cnt) {
std::ifstream fp(filename);
if (!fp.is_open())
return false;
std::istreambuf_iterator<char> i(fp), e;
size_t n = 0, m = 0;
for (; i != e; ++i, ++m) {
if (*i == '\n')
++n;
}
fp.close();
lines = (m > 0) ? n + 1 : n;
cnt = m;
return true;
}
int main(void) {
char fn[] = "c:\\project\\1.txt";
size_t lines, cnt;
if (load_info(fn, lines, cnt)) {
std::cout << "lines: " << lines << std::endl
<< "count: " << cnt << std::endl;
}
std::cin.get();
return 0;
}
Ответы (1 шт):
Автор решения: wololo
→ Ссылка
Попробуйте так:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <cstdint>
#include <limits>
#include <cstddef>
#include <locale>
using std::cout;
bool load_info(const std::string& filename, std::vector<std::uint_least64_t>& stat)
{
stat.clear();
stat.resize(std::numeric_limits<unsigned char>::max() + 1UL, 0);
std::ifstream fin(filename, std::ios_base::in | std::ios_base::binary);
if (!fin.is_open())
return false;
auto fin_begin = fin.tellg();
fin.seekg(0, std::ios_base::end);
auto fin_end = fin.tellg();
auto fin_size = fin_end - fin_begin;
fin.seekg(0, std::ios_base::beg);
for (decltype(fin_size) pos = 0; pos < fin_size; ++pos)
{
char symb = 0;
fin.read(&symb, sizeof(symb));
if (!fin.good())
return false;
++stat[static_cast<unsigned char>(symb)];
}
return true;
}
int main()
{
std::vector<std::uint_least64_t> stat;
std::locale loc("");
if (load_info("c:\\project\\1.txt", stat))
for (std::size_t i = 0; i < stat.size(); ++i)
if (stat[i] > 0)
{
if (std::isprint((unsigned char)i, loc))
cout << "symb = '" << (unsigned char)i << "' ";
else
cout << "symb = '' ";
cout << "code = " << i << " stat = " << stat[i] << "\n";
}
return 0;
}