Тема: Українська мова в QT
Доброго дня всім, мені потрібно взяти символ з textEdit'a, але цей символ буде українською або російською, перевіряю символ
if(text[1] == 'П')
але воно повертає фолс, при тому, що все виконує умови.
Що ж робити?
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → Українська мова в QT
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Доброго дня всім, мені потрібно взяти символ з textEdit'a, але цей символ буде українською або російською, перевіряю символ
if(text[1] == 'П')
але воно повертає фолс, при тому, що все виконує умови.
Що ж робити?
а text[1] - це точно 'П' ? Може text[0] ?
Точно 'П' - я вже багато як перевіряв, і у мене цикл з нуля йде, 1 я щоб зрозуміли написав
А якщо L'П'?
Для порівняння рядків (а також символів) є спеціальний метод "compare"
http://doc.qt.io/qt-5/qstring.html#compare-1
і клас QChar для символів
http://doc.qt.io/qt-5/qchar.html
bool operator==(QChar c1, QChar c2)
Returns true if c1 and c2 are the same Unicode character; otherwise returns false.
О, це чудово, що ви написали про QChar! І як же ви пропонуєте його тут застосовувати? Дайте здогадаюся:
if(text[1] == QChar(L'П'))
правильно? Дуже зручно.
if(text.at(1) == "П")
Обклався попкорном, чекаю на спробу це реалізувати.
Betterthanyou написав:if(text.at(1) == "П")
Обклався попкорном, чекаю на спробу це реалізувати.
Щo реалізувати ? Не зрозумів, QString i QChars вже має такі перевантаження
QString stores a string of 16-bit QChars, where each QChar corresponds one Unicode 4.0 character...,QString provides dozens of overloads designed to simplify string usage...
#include <QCoreApplication>
#include <QString>
#include <iostream>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString text1 = "*Привіт*";
QString text2 = "*Щось інше*";
if(text1.at(1) == "П")
std::cout<<"Success\n";
else
std::cout<<"Fail\n";
if (text2.at(1) == "П")
std::cout << "Success\n";
else
std::cout << "Fail\n";
return a.exec();
}
І що, таке прокатило?
Тоді цікаво вже, чому перше не йшло.
Так, працює.
'П' це
http://www.utf8-chartable.de/unicode-ut … p;utf8=dec
UTF-8(dec.) = 208 159
unsigned char text[10] = "П\0";
std::cout<<(unsigned)text[0]<<'\n';
std::cout<<(unsigned)text[1]<<'\n';
std::cout<<(unsigned)text[2]<<'\n';
//208 159 0
у одинарних лапках може бути лише один символ (за стандартними налаштуваннями кодування), тому 208 відкидається (159 залишається). (не перевірено!)
std::cout<<(unsigned)(unsigned char)'П'<<'\n';
//159
у подвійних лапках можна "скільки завгодно" писати символів, вони не будуть відкидатися.
The wchar_t type is defined by MIDL as an unsigned short (16-bit) data object.
L'П' - це два байти
'П' - один байт
Оскільки Qt працює в Unicode 4.0 character, то напевно ASCII конвертується в Unicode, а вже потім порівнюється
QCeator видає попередження якщо написати 'П': "warning: multi-character character constant [-Wmultichar]
if(text1.at(1) == 'П')"
Якщо ж написати "П" - ніяких попереджень/помилок немає
std::cout<<(unsigned short)L'П'<<'\n';//1055
std::cout<<(unsigned short)'П'<<'\n';//53407
1055 - Unicode code point (або 0x41f)
53407 (208 | 159) - UTF-8(dec.)
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися