Равенство символов Юникода - PullRequest
0 голосов
/ 27 мая 2018

Мне нужно написать простое сравнение.

if (user entered "Д" first)
{
   //do something
}

Проблема в том, что мне нужно сравнить символы Юникода (в данном случае русская буква "Д").

Мне удалось сделать это следующим образом:

std::string option;
getline(std::cin, option);
if (option.compare(0, 1, u8"Д"))
{
   //do something
}

Как я могу сделать это с char, без использования std::string с compare?Хотя я был бы рад, если бы вы предложили лучшее решение для std::string.

1 Ответ

0 голосов
/ 28 мая 2018

Далеко от идеала, но все просто и работает (надеюсь):

#include <iostream>
#include <string>

char const yes[] = u8"Д";
char const no[] = u8"Н";

int main()
{
    std::string str;
    while (std::cin >> str)
    {

        std::cout << "Let's Да? " << str << "! => " << std::boolalpha << (str.substr(0, sizeof(yes) - 1) == yes) << std::endl;
        std::cout << "Let's Нет? " << str << "! => " << std::boolalpha << (str.substr(0, sizeof(no) - 1) == no) << std::endl;
    }
}

Демо: https://ideone.com/Vhtl1T

Let's Да? Да! => true
Let's Нет? Да! => false
Let's Да? Нет! => false
Let's Нет? Нет! => true
Let's Да? Нет! => false
Let's Нет? Нет! => true
Let's Да? Да! => true
Let's Нет? Да! => false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...