首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算switch中的QChar对象?

如何计算switch中的QChar对象?
EN

Stack Overflow用户
提问于 2020-01-21 17:45:15
回答 2查看 257关注 0票数 1

通过一堆代码,希望改进它。

我遇到了这一点:

代码语言:javascript
复制
if (c == '<' || c == '>') {
    pattern.append("\\b");
} else if (c == 'a') {
    pattern.append("[a-zA-Z]");
} else if (c == 'A') {
    pattern.append("[^a-zA-Z]");
} else if (c == 'h') {
    pattern.append("[A-Za-z_]");
} else if (c == 'H') {
    pattern.append("[^A-Za-z_]");
} else if (c == 'c' || c == 'C') {
    ignorecase = (c == 'c');
} else if (c == 'l') {
    pattern.append("[a-z]");
} else if (c == 'L') {
    pattern.append("[^a-z]");
} else if (c == 'o') {
    pattern.append("[0-7]");
} else if (c == 'O') {
    pattern.append("[^0-7]");
} else if (c == 'u') {
    pattern.append("[A-Z]");
} else if (c == 'U') {
    pattern.append("[^A-Z]");
} else if (c == 'x') {
    pattern.append("[0-9A-Fa-f]");
} else if (c == 'X') {
    pattern.append("[^0-9A-Fa-f]");
} else if (c == '=') {
    pattern.append("?");
} else {
    pattern.append('\\');
    pattern.append(c);
}

如果c是一个字符,这将很容易转换为一个开关。c是一个QChar;我应该如何将QChar转换为整数,并将其与>=等各种情况进行可靠的比较?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-21 18:58:08

QChar是16位UTF-16字符的包装器。

您可以使用返回unsigned shortQChar::unicode()来检索值。

你可以这样写你的开关:

代码语言:javascript
复制
QChar c;
switch (c.unicode()) {
    case u'a':
    ...
}

使用case语句时要小心,因为如果使用8位字符文字,它可能不会像预期的那样工作。

例如,é可能是0xE9 (拉丁语-1,UTF16),或者0x82 (CP437),甚至是0xC3 0xA9 (UTF-8,它不会编译,因为它需要2个字符)。

解决方案是使用UTF-16字面量,这些字面量从C++11开始就是C++的一部分。例如,u'é'总是被编译为值为0x00E9char16_t (~unsigned short)。

票数 3
EN

Stack Overflow用户

发布于 2020-01-21 17:54:41

你可以定义字典之类的东西,我指的是Map:

代码语言:javascript
复制
int main(int argc, char* argv[])
{
    QMap<QChar, QString> myMap{{'a', "[a-zA-Z]"},{'X', "[^0-9A-Fa-f]"}, {'h', "[A-Za-z_]"}};

    QString regex{};
    regex.append(myMap.value('a', ""));
    regex.append(myMap.value('5', ""));
    regex.append(myMap.value('X', ""));
    qDebug() <<  "myRegex: " << regex;
    return 0;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59838236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档