zoukankan      html  css  js  c++  java
  • 5.QT-QString类

    Qt中的字符串类

    介绍

    • 采用Unicode编码 
    • 采用隐式共享技术,节省内存和不必要的数据拷贝
    • 隐式共享介于浅拷贝深拷贝之间,当两个string对象赋值时,会实现浅拷贝(共享一块内存),如果某个对象被修改了,则会实现深拷贝(从新开辟内存)
    • 跨平台使用,不需要考虑不同平台的兼容性
    • QString直接支持字符串与数字的相互转换
    • QString直接支持字符串大小比较
    • QString直接支持不同字符编码间的相互转换
    • QString直接支持std::stringstd::wstring的相互转换
    • QString直接支持正则表达式的应用

     

    QString常用函数

    static const QChar data[4] = { 0x0055, 0x006e, 0x10e3, 0x03a3 };
    QString str(data, 4);    //通过QChar宽字符初始化
    
    str = "hello";     //直接赋值
    
    str.length();    //获取字符串长度
    
    str.size();     //获取字符串数量,等价于length()
    
    str.capacity();   //获取容量,容量包含了当前string里不必增加内存就能使用的字符数
    
    str.isEmpty();      //如果str为空或为0 ,则返回true,否则返回false
    
    str.isNull();    //如果为0,则返回true,否则返回false
    
    str.clear();    //清空str
    
    str. resize(8);    //设置str的字符串长度
    
    str.fill('m');     //将str字符串,全部字符填为'm'
    
    str.fill('m',5);    //填充5个字符'm',并修改str的字符串长度为5
    
           
    str.append("ABC");   //在str字符串末尾附加"ABC"子串
    
    str.prepend("abc");    //在str字符串头部添加"abc"子串
     
    str. chop(2);    //从str字符串末尾, 去掉2个字符
    
    str = "Montreal";
    
    str.remove(1, 4);    //从str下标1位置开始,清除4个字符, s = "Meal"
    
    str.setNum(1234.5);    //数字转字符串 str = "1234.5"
    
    double val = str.toDouble();   //字符串转double  val =1234.5
     
    
    /*arg()成员函数:通过string串里通过“%数字”表示argument(参数) */
    str = QString("%1,%2,%3,%4,%5,%6")
        .arg("A","B","C")
        .arg("D","E","D");     //字符串参数替换 str1 = "A,B,C,D,E,D"
    
    str = QString("%1,%2")
             .arg(40)   
             .arg(40,0,16);        //将40以16进制转换为字符串,如果想使用大写的话,通过toUpper()函数来实现
                                   //还可以这样写QString("%1").arg(cnt,5,10,QChar('0');  //输出00050,表示保留5位有效数字,

    floatcnt2=50.12345;
      qDebug()<<QString::asprintf("%.2f",cnt2);  //打印50.12
      
    
    str.sprintf("%d %s",1,"first");    //通过一定参数输出到字符串里, str= "1 first"
    
    str="abcdef";
    
    str.indexOf ("bc");      //return 1
    
    str.indexOf ("bc",1);     //从str下标1的位置查找,return 1
    
    str.indexOf ("bc",2);       //没找到,则return -1
    
     
    str. lastIndexOf("bc");    //反向查找,从str末尾向前查找,return 1
     
    str. lastIndexOf("bc",5);    //反向查找,从str下标5的位置向前查找,return 1
    
    str.lastIndexOf("bc",-2);    //反向查找,从str末尾-1的位置向前查找
    str.insert( 2, "AB ");     //在str字符串下标2的位置插入"AB "子串 str="abcdefgh"; str2 = str.mid(3);   //提取子串,提取出str的下标为3到末尾,给str2 str2 = str.mid(3,4); //从str的下标为3开始,提取4个字符给str2 str = "th!ea minimum"; str.indexOf(QRegExp("[m i!]"), 0); // 使用正则表达式匹配查找,遇到m, ,i,! 时停止 ,所以return 2

    long a = 63;
    QString s = QString::number(a, 16);             // s == "3f"

    QString t = QString::number(a, 16).toUpper(); // t == "3F"
     
     QString str = "Bananas";
     str.startsWith("Ban");           //判断str的开头是否以"Ban"开头,returns true
     str.startsWith("Car");           // returns false

     常用四则运算符:

    QString str="*+-";
    str.indexOf(QRegExp("[+-]"));    //匹配一次+或-,所以return 1
    
    str="*asd12345682";
    str.indexOf(QRegExp("23"));      //匹配23成功,return 5
    
    str="*abcsd8de";
    str.indexOf(QRegExp("[0-9]"));      //匹配一次0~9数字,所以return 6 

     示例-通过四则运算匹配一个范围的数字

    比如:

    12.5-19.5Kg    :提取出12.5 和19.5

    125.68m~376.78m  :提取出125.68和376.78

    999.99美元    :提取出999.99

    代码如下:

        QString text = ui->stringText->text();
        QString number1,number2;
    
        int begin1=text.indexOf(QRegExp("[0-9]"));
        text.remove(0,begin1);
        int begin2=text.indexOf(QRegExp("[^0-9.]"));  //找非0~9,小数点以外的字符位置
        if(begin1==-1)
        {
            qDebug()<<"err";
            return ;
        }
    
        if(begin2!=-1)          //比如 123XYZ
           number1 = text.left(begin2);
        else        //只有一个数字
        {
             number1 = text;
             qDebug()<<"range:"<<number1.toFloat();
             return ;
        }
    
        text.remove(0,begin2);
        begin1=text.indexOf(QRegExp("[0-9]"));
        text.remove(0,begin1);
        begin2=text.indexOf(QRegExp("[^0-9.]"));        //找非0~9,小数点以外的字符位置
        if(begin1==-1)  //只有一个数字
        {
            qDebug()<<"range:"<<number1.toFloat();
            return ;
        }
    
        if(begin2!=-1)          //比如 123XYZ
            number2 = text.left(begin2);
        else
            number2 = text;
    
        qDebug()<<"range:"<<number1.toFloat()<<"~"<<number2.toFloat();

    打印如下:

     

     

     其它使用:

    QByteArray QString::toLocal8Bit () ;
        //获取字节数组对象
    char * QByteArray::data ();        //通过字节数组对象的成员data函数,获取char数组
    
    
    
      
    QString("%1").arg(cnt,5,10,QChar('0'
  • 相关阅读:
    Data Base mysql备份与恢复
    java 乱码问题解决方案
    【知识强化】第二章 物理层 2.1 通信基础
    【知识强化】第二章 进程管理 2.2 处理机调度
    【知识强化】第二章 进程管理 2.1 进程与线程
    【知识强化】第一章 操作系统概述 1.3 操作系统的运行环境
    【知识强化】第一章 网络体系结构 1.1 数据结构的基本概念
    【知识强化】第一章 网络体系结构 1.2 计算机网络体系结构与参考模型
    【知识强化】第一章 网络体系结构 1.1 计算机网络概述
    【知识强化】第一章 操作系统概述 1.1 操作系统的基本概念
  • 原文地址:https://www.cnblogs.com/lifexy/p/8884205.html
Copyright © 2011-2022 走看看