Не могу сравнить i-ый элемент строки с буквой (кириллица)
#include <iostream>
#include <fstream>
#include <string>
#include <clocale>
using namespace std;
struct Bukvu {
int e; int a; int T; int o; int p; int H;
int K; int x; int c; int B; int M;
};
Bukvu eng;
Bukvu rus;
int main()
{
setlocale(LC_ALL, "Russian");
wstring line;
wifstream in("text.txt");
if (in.is_open()) getline(in, line);
else cout << "Error";
for (int i = 0; i < line.size(); i++) {
if ((line[i] == 'A') || (line[i] == 'a')) eng.a += 0;
else if ((line[i] == "А") || (line[i] == "а")) rus.a += 1;
}
in.close(); // закрываем файл
cout << eng.a;
}
Пробовал и '', и "" - выдает ошибки в строке с кириллицой 'а' "А":
ISO C++ forbids comparison between pointer and integer с ""
warning: multi-character character constant [-Wmultichar] с ''
Помогите исправить, 1 курс универа, только разбираюсь в с++.
Заранее спасибо.
Проблему решил. Выводил line[i] элемент и смотрел его кодировку, как и предполагалось кириллица была из двух символов. В строке проверял элемент на кодировку которую узнал при выводе.
Ответы (1 шт):
Используйте L префикс для символьных литералов:
std::wstring str { L"АБВ" };
str[1] == L'Б';
Описание можно найти здесь.
P.S. Обратите внимание на кавычки - line[i] == "А"
- здесь вы пытаетесь сравнивать значение i-ого элемента с символьной строкой (не литералом!).