• QT学习:08 QString


    --- title: framework-cpp-qt-08-QString EntryName: framework-cpp-qt-08-QString date: 2020-04-16 15:36:48 categories: tags: - qt - c/c++ - string ---

    章节描述:
    Qt的QString类提供了很方便的对字符串操作的接口(字符串中如果有汉字,一个汉字算一个字符)。

    Qt中的字符串类

    • 采用Unicode编码,所以一个QChar占用两个字节
    • 使用隐式共享技术来节省内存和减少不必要的数据拷贝
    • 跨平台使用,不用考虑字符串的平台兼容性
    • QString直接支持字符串和数字之间的相互转换
    • QString直接支持字符串之间的大小比较(按照字典序)
    • QString直接支持不同编码下的字符串转换
    • QString直接支持std::string和std::wstring之间的相互转换
    • QString直接支持正则表达式的使用

    QString常用操作

    包括字符串类对象构造、追加字符串、组合字符串、插入及替换、查找字符获取索引、字符串提取、向其他类型转换、比较、判断字符串是否存在、分隔字符串、过滤空白字符串、大小写切换、判断是否以某个字符串开始或结束、提取字符串、获取长度、

    QString对象构造

    QString ( const QChar * unicode, int size )//使用QChar数组中的size长度个字符构造QString
    QString ( const QChar * unicode )//使用QChar数组构造QString,结尾以''结束
    QString ( QChar ch )//使用一个QChar字符构造QString
    QString ( int size, QChar ch )//使用size个ch构造QString
    QString ( const QLatin1String & str )//使用单字节编码的str构造QString
    QString ( const QString & other )//使用其他QString引用构造新的QQString
    QString ( const char * str )//使用字符串常量构造QString
    QString ( const QByteArray & ba )//使用字节数组构造QString
    

    追加字符串

    QString s = "str";
    s += "ing";//s = "string"
    s.append(" ");//s = "string "类似于push_back
    s.append("test");//向后追加:s = "string test", 也可以使用push_back往字符串末尾添加子串,能达到一样的作用
    s.prepend("This is ");//向前追加:s = "This is string Test"类似于push_front
    

    组合字符串

    可以使用sprintf函数和arg函数

    QString s;
    s.sprintf("%s %.1f%%", "Value", 100.0);//s = "Value 100.0%
    s = QString("%1 %2 %3 %4").arg("This").arg("is").arg("a").arg("test");//s = "This is a test
    

    获取字符串长度

    int length () const//原型
    
    //示例
    QString s = "Hello World";
    qDebug() << s.length();//输出11,说明不带''
    

    插入及替换

    插入使用insert,替换使用replace

    QString& insert ( int position, const QString & str )
    QString& insert ( int position, const QLatin1String & str )
    QString& insert ( int position, const QChar * unicode, int size )
    QString& insert ( int position, QChar ch )
    

    参数position表示插入的位置,从0开始计算

    其他参数表示待插入的类型,在构造函数QString时有讲。

    QString&    replace ( int position, int n, const QString & after )
    QString &   replace ( int position, int n, const QChar * unicode, int size )
    QString &   replace ( int position, int n, QChar after )//替换成n个QChar
    

    参数position同样表示开始替换的位置
    参数n表示替换的长度
    其他参数表示待替换的类型,在构造QString时有讲
    在Qt的帮助文档中还提供了另外的几组replace函数,使用时可查文档

    查找字符串

    使用indexof函数从前向后获取索引第一次出现的位置

    int indexOf ( const QString & str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive ) const
    int indexOf ( const QLatin1String & str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive ) const
    int indexOf ( QChar ch, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive ) const
    int indexOf ( const QRegExp & rx, int from = 0 ) const
    int indexOf ( QRegExp & rx, int from = 0 ) const
    

    函数的作用是返回待查找字符串第一次出现的位置,没有找到目标字符串返回-1。
    str表示待查找的各种形式表示的字符或字符串
    QRegExp为通过正则表达式匹配的规则查找
    from表示开始查找的位置,如果from = -1表示从最后一个字符开始,如果from = -2表示从倒数第二个开始,以此类推。

    • Qt::CaseSensitive表示区分大小写
    • Qt::CaseInsensitive不区分大小写

    使用lastIndexof函数从后向前获取索引第一次出现的位置

    int lastIndexOf(const QString &str, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
    int lastIndexOf(QChar ch, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
    int lastIndexOf(QLatin1String str, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
    int lastIndexOf(const QStringRef &str, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
    int lastIndexOf(const QRegExp &rx, int from = -1) const
    

    例子:

    QString str = "the minimum";
    str.indexOf(QRegExp("m[aeiou]"), 0);       // returns 4
    str.lastIndexOf(QRegExp("m[aeiou]"));      // returns 8
    
    QString x = "std::string & QString";
    QString y = "ing";
    x.indexOf(y);               // returns 8
    x.indexOf(y, 1);            // returns 8
    x.indexOf(y, 10);           // returns 18
    x.indexOf(y, 19);           // returns -1
    
    x.lastIndexOf(y);           // returns 6
    x.lastIndexOf(y, 6);        // returns 6
    x.lastIndexOf(y, 5);        // returns 2
    x.lastIndexOf(y, 1);        // returns -1
    

    使用contains 判断字符串是否存在

    contains ( const QString & str, Qt::CaseSensitivity cs = Qt::CaseSensitive ) const
    

    使用isEmpty判断字符串是否为空

    等价于if(QString("").length() == 0)

    bool isEmpty () const//原型
    
    QString().isEmpty();            // returns true
    QString("").isEmpty();          // returns true
    QString("x").isEmpty();         // returns false
    QString("abc").isEmpty();       // returns false
    

    isNull 判断字符串是否有效

    bool isNull () const//原型
    
    QString().isNull();             // returns true
    QString("").isNull();           // returns false
    QString("abc").isNull();        // returns false
    

    清除子串

    QString &   remove ( QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive )
    QString &   remove ( const QString & str, Qt::CaseSensitivity cs = Qt::CaseSensitive )
    
    QString s = "Hello World";
    QString ss = s.remove("l");//ss = "Heo Word"
    

    字符串提取

    可以从某个位置(左边,中间,右边)提取子串。

    
    QString left(int n) const
        
    QString mid ( int position, int n = -1 ) const //从position开始截取n个字符并返回
    
    QString right(int n) const
    

    例子:

    //不使用默认参数
    QString s = "QString";
    QString ss1 = s.mid(1,3);//ss = "Str"
    
    //省略第二个参数表示从position开始截取到末尾
    QString ss2 = s.mid(1);//ss = "String"
    
    QString ss3 = s.left(4);//ss = "QStr"
    
    QString ss4 = s.right(3);//ss = "ing"
    

    分割字符串

    通过使用split()能够将一个大串按照某个子串划分成多个子串并存到QStringList中。

    QString str = "You,I,She";
    QStringList list= str.split(",");
    
    结果list.at(0) = “You” list.at(1) = “I” list.at(2) = “She” 
    

    以某个子串切割字符串

    QString section(QChar sep, int start, int end = ..., QString::SectionFlags flags = SectionDefault) const
    

    例子:

    QString str;
    QString csv = "forename,middlename,surname,phone";
    QString path = "/usr/local/bin/myapp"; // First field is empty
    QString::SectionFlag flag = QString::SectionSkipEmpty;
    
    str = csv.section(',', 2, 2);   // str == "surname"
    str = path.section('/', 3, 4);  // str == "bin/myapp"
    str = path.section('/', 3, 3, flag); // str == "myapp"
    

    过滤空白字符

    QString trimmed () const
    

    返回值为去除了开头和结尾的空白字符串,这里的空白指QChar::isSpace()返回值为true,比如' ',' ','v','f',' '和' ';

    Whitespace means any character for which QChar::isSpace() returns true. This includes the ASCII characters ' ', ' ', 'v', 'f', ' ', and ' '.

    QString str = "	  lots	 of
    whitespace
     ";
    str = str.trimmed();
    // str == "lots	 of
    whitespace"
    

    另外一个过滤的方法:

    QString simplified() const
    

    返回字符串开头和结尾除去空白的字符串,并且内部的空白字符也去掉,这里的空白字符和上面的一样。中间连续的空格也用一个空格替换。

    QString str = "  lots	 of
    whitespace
     ";
    str = str.simplified();
    // str == "lots of whitespace";
    

    综合例子:

    #include <QString>
    #include <QDebug>
     
    int main(int argc, char *argv[])
    {
        Q_UNUSED(argc)
        Q_UNUSED(argv)
     
        QString str = "     1 2 3 4 5              "
                      "ABCDE           中文          ";
        str.append("
    ");
        str.append("
    ");
        str = str.trimmed();
        qDebug() << "start:" << str << ":end";
     
        str = str.simplified();
        qDebug() << "start:" << str << ":end";
     
        return 0;
    }
    

    大小写切换

    切换为全大写,使用toUpper()函数;切换为全小写,使用toLower()函数:

    QString s = "Hello World";
    
    QString ss2u = s.toUpper(); // "HELLO WORLD"
    QString ss2l = s.toLower(); // "hello world"
    

    判断是否以某个字符串开始或结束

    以某子串开始,使用startsWith()函数;以某子串结束,使用endsWith()函数

    bool startsWith(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
        
    bool endsWith(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
    

    例子:

    QString s = "http:www.xx.com";
    bool i1 = s.startsWith("http:");
    bool i2 = str.endsWith("com");
    

    获取子串出现的次数

    //原型
    int count ( const QString & str, Qt::CaseSensitivity cs = Qt::CaseSensitive ) const
    //示例
    QString s = "Hello World";
    qDebug() << s.count("l");// 输出3
    

    从字符串到其他类型

    使用的是toInt(), toLongLong(), toDouble()…等等。

    QString str = "12";
    int i = str.toInt();//i = 12
    

    数字到字符串

    静态函数number或者setNumber

    QString s = QString::number(100.0);//参数包含int double long等等
    QString ss;
    ss.setNum(100.0);
    
  • 相关阅读:
    Character Encoding题解(容斥)
    P1445 [Violet]樱花 题解(推式子)
    F. Stone 题解(对称博弈)
    M. 810975 题解(容斥)
    P1365 WJMZBMR打osu! / Easy 题解(期望dp)
    icpc济南
    C#创建windows服务并定时执行
    批处理 windows 服务的安装与卸载
    前台单击文件,jQuery删除后台相应真实的文件
    Jquery直接调用后台方法(WebMethod框架的使用)
  • 原文地址:https://www.cnblogs.com/schips/p/framework-cpp-qt-08-QString.html
Copyright © 2020-2023  润新知