【问题标题】:How to count a particular character in QString Qt如何计算QString Qt中的特定字符
【发布时间】:2013-08-31 10:57:03
【问题描述】:

想象一下我有一个包含这个的 QString:

"#### some random text ### other info
a line break ## something else"

如何知道我的 QString 中有多少哈希? 换句话说,我怎样才能从这个字符串中得到数字 9?


回答

感谢答案,解决方案非常简单,在文档中忽略了这一点 使用 count() 方法,您可以将所计数的内容作为参数传递。

【问题讨论】:

    标签: c++ qt qt5 qstring


    【解决方案1】:

    您可以使用this 方法并传递# 字符:

    #include <QString>
    #include <QDebug>
    
    int main()
    {
        // Replace the QStringLiteral macro with QLatin1String if you are using Qt 4.
    
        QString myString = QStringLiteral("#### some random text ### other info\n \
                                           a line break ## something else");
        qDebug() << myString.count(QLatin1Char('#'));
        return 0;
    }
    

    然后以 gcc 为例,您可以使用以下命令或类似的命令来查看结果。

    g++ -I/usr/include/qt -I/usr/include/qt/QtCore -lQt5Core -fPIC main109.cpp && ./a.out

    输出将是:9

    如您所见,您无需自己进行迭代,因为 Qt 便捷方法已经使用内部 qt_string_count. 为您完成了这项工作

    【讨论】:

    • 这确实是对的,我只是看不出 myString.count(QLatin1Char('#')) 和 myString.count("#") 的区别
    • 使用 .count("#") 可以自动将 utf-8 字符串转换为 latin1。使用 .count(QLatin1Char('#') 您可以明确地执行此操作。听起来差别不大,但是当您的 .pro 文件中设置了 QT_NO_CAST_TO_ASCII 变量时,您的版本将不再工作。为什么有人会这样做?更好控制您的编码。通过自动 utf-8 -> latin1 转换,您的程序中可能会出现一些令人讨厌且难以发现的错误。
    【解决方案2】:

    似乎 QString 有有用的计数方法。

    http://qt-project.org/doc/qt-5.0/qtcore/qstring.html#count-3

    或者你可以循环遍历字符串中的每个字符并在找到#时增加一个变量。

    unsigned int hCount(0);
    for(QString::const_iterator itr(str.begin()); itr != str.end(); ++itr)
        if(*itr == '#') ++hCount;
    

    C++11

    unsigned int hCount{0}; for(const auto& c : str) if(c == '#') ++hCount;
    

    【讨论】:

    • @Vincent:我认为这不是正确的解决方案,因为这个迭代器很复杂,而且提供的 count-2 链接也不是这里需要的。请参阅下面的完整工作代码。
    猜你喜欢
    • 2019-02-03
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    相关资源
    最近更新 更多