K1MeR
(Кирилл)
26.Октябрь.2020 11:47:33
#1
#include <iostream>
#include <string>
#include <fstream>
#include <map>
using namespace std;
struct chcp1251 {
static bool is_alpha(char ch) {
return (ch >= -64 && ch <= -1)
|| ch == -88
|| ch == -72
|| (ch >= 65 && ch <= 97)
|| (ch >= 90 && ch <= 122);
}
static bool is_digit(char ch) {
return ch >= 48 && ch <= 57;
}
};
int main() {
system("chcp 1251 > nul");
map<char, size_t> letters;
map<char, size_t> digits;
ifstream file("text.txt");
if (file.is_open()) {
char ch;
while (ch = file.get()) {
if (file.eof()) break;
if (chcp1251::is_alpha(ch)) ++digits[ch];
if (chcp1251::is_digit(ch)) ++letters[ch];
}
file.close();
}
else puts("Файл text.txt не найден!");
cout << "Введенные числа:" << endl;
for (auto [key, value] : letters) cout << key << " - " << value << '\n';
wcout.put(L'\n');
cout << "Введенные буквы:" << endl;
for (auto [key, value] : digits) wcout << key << " - " << value << '\n';
system("pause > nul");
}
Задача:
Проанализировать файл с текстом. Определить частоту повторяемости каждой буквы алфавита и каждой цифры в тексте.
AlexP
(Alex P.)
26.Октябрь.2020 12:02:47
#2
Так вы ж писали код, вот и поясняйте )
K1MeR
(Кирилл)
26.Октябрь.2020 12:16:14
#3
К сожалению нет.
struct chcp1251 {
static bool is_alpha(char ch) {
return (ch >= -64 && ch <= -1)
|| ch == -88
|| ch == -72
|| (ch >= 65 && ch <= 97)
|| (ch >= 90 && ch <= 122);
}
static bool is_digit(char ch) {
return ch >= 48 && ch <= 57;
}
};
int main() {
system("chcp 1251 > nul");
map<char, size_t> letters;
map<char, size_t> digits;
ifstream file("text.txt");
if (file.is_open()) {
char ch;
while (ch = file.get()) {
if (file.eof()) break;
if (chcp1251::is_alpha(ch)) ++digits[ch];
if (chcp1251::is_digit(ch)) ++letters[ch];
}
file.close();
}
можете пожалуйста эти пояснить?
AlexP
(Alex P.)
26.Октябрь.2020 16:59:16
#4
Читать про работу с файлами в С++ (fstream), STL, map.
https://metanit.com/cpp/tutorial/8.3.php
https://ravesli.com/urok-212-bazovyj-fajlovyj-vvod-vyvod/
http://www.cplusplus.com/reference/istream/istream/get/
https://ravesli.com/urok-197-kontejnery-stl/
http://cppstudio.com/post/9535/
http://www.cplusplus.com/reference/map/map/operator[]/
см. http://www.asciitable.com/ для 0-127 + видимо какая-то из русских кодировок (CP1251, …) для 128-255 (значения влезающие в один байт), только вместо 128-255 тут отрицательные числа потому что автор не преобразовал в unsigned char
.
K1MeR:
system("chcp 1251
Видимо меняет кодировку на CP1251, чтобы можно было выводить русские символы в консоль.
Не уверен, что это сработает.
Вроде setlocale
обычно используют.
K1MeR
(Кирилл)
29.Октябрь.2020 12:07:31
#5
так он русские буквы нормально считывает,большие и маленькие)