Пишу простенькую программу для статистической (количественной) оценки текста. Во время выполнения вместо исходного текста на русском языке из файла цепляет (В похожие вопросы попались методы смены языка консоли, однако мой вопрос не касается ВЫВОДА, проблема именно что VS19 видит текст следующим образом, а сравнивает с обычными русскими буквами) "Р¬ Р˜Р™Р—РџР®РљРљР® СВНЙЗЬШЖВЧ Р˜Р—Р›Р—Р”РЁ РЃР—РђР–Р— Р˜Р™Р’РЃР®Р–Р§Р›РЈ ЛЗЕУДЗ ЗЩЙШЛВЁЫЮ Р—Р˜Р®Р™РЁРџР’Р’, Р’Р–РЁР Р® Р–РЁ Р˜Р™Р’Р®РЃР–Р—Р“ КЛЗЙЗЖЮ Р˜Р—Р•РњР РЁР›Р®Р•.." вместо исходного "Ь ИЙЗПЮККЮ СВНЙЗЬШЖВЧ ИЗЛЗДШ ЁЗАЖЗ ИЙВЁЮЖЧЛУ ЛЗЕУДЗ ЗЩЙШЛВЁЫЮ ЗИЮЙШПВВ, ВЖШРЮ ЖШ ИЙВЮЁЖЗГ КЛЗЙЗЖЮ ИЗЕМРШЛЮЕУ ЖЮ КЁЗАЮЛ ЗЭЖЗБЖШРЖЗ ЬЗККЛШЖЗЬВЛУ ВКОЗЭЖЫГ ЛЮДКЛ ИЗ ИЙВЖЧЛЗЁМ КЗЗЩТЮЖВЦ, ЭШАЮ БЖШЧ ИЙШЬВЕУЖЫГ ДЕЦР." (исходный текст зашифрован поэтому так выглядит). Насколько я понял проблема в кодировке, однако как ее решить не совсем понимаю. Так же я не доволен общим видом кода, поэтому приветствуются варианты его сократить и улучшить читаемость.
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int a = 0;
int b = 0;
int v = 0;
int g = 0;
int d = 0;
int e = 0;
int ee = 0;
int j = 0;
int z = 0;
int i = 0;
int k = 0;
int l = 0;
int m = 0;
int n = 0;
int o = 0;
int p = 0;
int r = 0;
int s = 0;
int t = 0;
int f = 0;
int h = 0;
int c = 0;
int ch = 0;
int y = 0;
int cha = 0;
int znak = 0;
int ii = 0;
int ie = 0;
int u = 0;
int ia = 0;
string intext;
int totalNums = 1;
ifstream file_in;
file_in.open("W:\\posled.txt");
if (!file_in)
{
std::cout << "Проблемы с открытием файла";
}
else
{
std::cout << "Файл открыт!\n";
}
while (!file_in.eof()) // основной цикл
{
//string stroka;
getline(file_in, intext);
for (int sch = 0; sch < intext.size(); sch++)
{
if (intext[sch] == 'А')
{
a++;
totalNums++;
}
if (intext[sch] == 'Б')
{
b++;
totalNums++;
}
if (intext[sch] == 'В')
{
v++;
totalNums++;
}
if (intext[sch] == 'Г')
{
g++;
totalNums++;
}
if (intext[sch] == 'Д')
{
d++;
totalNums++;
}
if (intext[sch] == 'Е')
{
e++;
totalNums++;
}
if (intext[sch] == 'Ё')
{
ee++;
totalNums++;
}
if (intext[sch] == 'Ж')
{
j++;
totalNums++;
}
if (intext[sch] == 'З')
{
z++;
totalNums++;
}
if (intext[sch] == 'И')
{
i++;
totalNums++;
}
if (intext[sch] == 'Й')
{
ii++;
totalNums++;
}
if (intext[sch] == 'К')
{
i++;
totalNums++;
}
if (intext[sch] == 'Л')
{
l++;
totalNums++;
}
if (intext[sch] == 'М')
{
m++;
totalNums++;
}
if (intext[sch] == 'Н')
{
n++;
totalNums++;
}
if (intext[sch] == 'О')
{
o++;
totalNums++;
}
if (intext[sch] == 'П')
{
p++;
totalNums++;
}
if (intext[sch] == 'Р')
{
r++;
totalNums++;
}
if (intext[sch] == 'С')
{
s++;
totalNums++;
}
if (intext[sch] == 'Т')
{
t++;
totalNums++;
}
if (intext[sch] == 'У')
{
y++;
totalNums++;
}
if (intext[sch] == 'Ф')
{
f++;
totalNums++;
}
if (intext[sch] == 'Х')
{
h++;
totalNums++;
}
if (intext[sch] == 'Ч')
{
ch++;
totalNums++;
}
if (intext[sch] == 'Ц')
{
c++;
totalNums++;
}
if (intext[sch] == 'Щ')
{
cha++;
totalNums++;
}
if (intext[sch] == 'Ь' or intext[sch] == 'Ъ')
{
znak++;
totalNums++;
}
if (intext[sch] == 'Ы')
{
ii++;
totalNums++;
}
if (intext[sch] == 'Э')
{
ie++;
totalNums++;
}
if (intext[sch] == 'Ю')
{
u++;
totalNums++;
}
if (intext[sch] == 'Я')
{
ia++;
totalNums++;
}
else
{
sch++;
}
}
}
if (totalNums == 0)
{
cout << "нет корректной входной последовательности \n";
}
else
{
cout << "A = " << a / totalNums << "\n";
cout << "Б = " << b / totalNums << "\n";
cout << "В = " << v / totalNums << "\n";
cout << "Г = " << g / totalNums << "\n";
cout << "Д = " << d / totalNums << "\n";
cout << "Е = " << e / totalNums << "\n";
cout << "Ё = " << ee / totalNums << "\n";
cout << "Ж = " << j / totalNums << "\n";
cout << "З = " << z / totalNums << "\n";
cout << "И = " << i / totalNums << "\n";
cout << "Й = " << ii / totalNums << "\n";
cout << "К = " << k / totalNums << "\n";
cout << "Л = " << l / totalNums << "\n";
cout << "М = " << m / totalNums << "\n";
cout << "Н = " << n / totalNums << "\n";
cout << "О = " << o / totalNums << "\n";
cout << "П = " << p / totalNums << "\n";
cout << "Р = " << r / totalNums << "\n";
cout << "С = " << s / totalNums << "\n";
cout << "Т = " << t / totalNums << "\n";
cout << "Ф = " << f / totalNums << "\n";
cout << "Х = " << h / totalNums << "\n";
cout << "Ц = " << c / totalNums << "\n";
cout << "Ч = " << ch / totalNums << "\n";
cout << "Щ = " << cha / totalNums << "\n";
cout << "Ъ/Ь = " << znak / totalNums << "\n";
cout << "Э = " << ie / totalNums << "\n";
cout << "Ю = " << u / totalNums << "\n";
cout << "Я = " << ia / totalNums << "\n";
}
}
<codecvt>и он считается устаревшим – dIm0n Sep 30 '20 at 20:42int main() { const char * byte_array = "Привет мир!"; std::string text(byte_array); system("chcp 1251"); std::cout << text << std::endl; return 0; } `
– Yakov Oct 01 '20 at 14:07