Палиндром в русских буквах
Требуется определить является ли строка палиндромом или нет. Фраза называется палиндромом (перевертышем), если после удаления пробелов и замены всех букв на заглавные она читается одинаково, как слева направо, так и справа налево. Мой код работает, но только через латинские буквы, а надо чтобы через русские тоже, как исправить?
#include <iostream>
using namespace std;
int main()
{
string s, s1="";
getline(cin, s);
for(int i=0; i<s.size(); i++){
if(s[i]==' ')
s.erase(i,1);
s[i]=toupper(s[i]);
}
for(int i=s.size()-1; i>=0; i--)
{
s1+=s[i];
}
if(s==s1)
cout<<"YES";
else cout<<"NO";
}
Ответы (1 шт):
Автор решения: desire
→ Ссылка
toupper не верно работает с Кириллицей.
Чтобы не возиться с представлением символов могу предложить следующий вариант:
#include <iostream>
#include <string>
#include <locale>
#include <codecvt>
#include <algorithm>
int main()
{
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
std::wstring s, s1 = L"";
std::getline(std::wcin, s);
s.erase(remove(s.begin(), s.end(), L' '), s.end());
std::transform(s.begin(), s.end(), s.begin(), [](wchar_t c) -> wchar_t { return std::toupper(c, std::locale()); });
for (int i = s.size() - 1; i >= 0; i--)
{
s1 += s[i];
}
if (s == s1)
std::wcout << L"YES";
else
std::wcout << L"NO";
}