QT字符串篇:相关函数

/*2022-8-22 QT课程9 完工 字符串相关
*   1-QLatin1String
*   2-QString构造
*   3-QString查找
*   4-QString构造替换
*   5-QString构造格式化
*   6-QString构造拼接
*   7-QStringList构造分割和合并
*/
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include<QDebug>
#include<QStringBuilder>
#include<QStringList>
int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    if (engine.rootObjects().isEmpty())
        return -1;
#if 0
    QLatin1Char a('a');
    char c1=a.toLatin1();
    ushort us1=a.unicode();//ASCII
#endif
#if 0
    const char* c1="helloQT";
    QLatin1String s1(c1);//不会拷贝数据,要保证原数据地址不会被释放
    QLatin1String s2(c1,5);

    qDebug()<<s1;
    qDebug()<<s2<<endl;//带双引号
    qDebug().noquote()<<s1;//去除双引号
#endif
#if 0   //索引访问数据
    QLatin1String s1("abcedf");
    int index=0;
    if(index>0&&index<s1.size())//取索引下标[] 没有错误检查需要手动加条件
    {
        QLatin1Char c1= s1[index];
        s1[index+1]=QLatin1Char('1');//能运行但不会改原数据,返回值类型error
    }
#endif
#if 0 //指针访问数据
    const char* c1="abcdef";
    QLatin1String s1(c1);
    const char* cc=s1.data();
    const char* ccc=s1.latin1();
#endif
#if 0 //QString构造
    QString s1="abcdef";
    qDebug()<<s1.left(2);
    qDebug()<<s1.right(2);
    s1.chop(2);//删除尾数据
    s1.remove(1,1);//指定索引 删除多少数据
    qDebug()<<s1.mid(1,2);//截取指定范围数据
    qDebug()<<s1.mid(2);//截取索引从2开始到结尾全部数据
    qDebug()<<s1;

#endif
#if 0 //查找
    QString x("abcdef");
    int pos1=x.indexOf('c');//从左向右找 逐个比较,返回正索引
    int pos2=x.lastIndexOf('d',-1,Qt::CaseInsensitive);//倒数最后一位开始找,,不区分大小写 返回正索引
    qDebug()<<pos1<<pos2;

    bool b=x.contains("ef");
    bool b1=x.contains("Ef");//Qt::CaseInsensitive 大小写不敏感
    qDebug()<<b<<b1;
#endif
#if 0 //替换
    QString s1("abcdef");//
    s1.replace(2,3,"SS");//索引2开始 长度为3 替换为 SS 结果 abSSf
    s1.replace('S','1');//S全部替换为 1 结果 ab11f
    qDebug()<<s1;
#endif
#if 0 //格式化
    QString s1=QString("SS:%1 %3 %2")  //占位符 最多99个arg
            .arg("1").arg("2").arg("3");
    qDebug()<<s1;//"SS:1 3 2"
//*****
    QString s2=QString("SS:%1,%2")//右对齐 不够的补齐4字符以‘ ’空填充,以实际字符长度为主
            .arg("1",4).arg("11",4);//“11111”,4  则依然显示11111
    QString s3=QString("SS:%1,%2")//左对齐
            .arg("1",-4).arg("11",-4);
    QString s4=QString("SS:%1,%2")//默认为0 自动对齐
            .arg("1").arg("11");
    qDebug()<<s2<<s3<<s4;//"SS:   1,  11"    "SS:1   ,11  "     "SS:1,11"
//*****
    QString s5=QString("SS:%1,%2,%3,%4")
            .arg(16,0,16).arg(8,0,8).arg(4,0,2).arg(10,0,10);//以不同进制格式化
    qDebug()<<s5;//"SS:10,10,100,10"
//*****
    QString s6=QString("SS:%1,%2")//右对齐
            .arg("1",5,'#').arg("11",5,'#');//以‘#’填充
    qDebug()<<s6;//"SS:####1,###11"
#endif
#if 0 //格式化
    qDebug()<<QString::number(76,16);//"4c"
    qDebug()<<QString::number(76,16).toUpper();//"4C"
#endif
#if 0 //比较字符串是否相同
    qDebug()<<QString::compare("ab","ac");//-1
    qDebug()<<QString::compare("ab","ab");//0
    qDebug()<<QString::compare("ab","a");//1
//*****
    QString s1="ab";
    s1.localeAwareCompare("ab");//0
    qDebug()<<QString::localeAwareCompare("ab","ab");//0
//*****
    QString s2="力";
    QString s3="扣";
    qDebug()<<s2.localeAwareCompare(s3);//1  有汉字的话 更适合比较习惯
    qDebug()<<s2.compare(s3);//-4040
#endif
#if 0 //拼接字符串
    QString s1("111");
    s1.append("22").append("33");//在尾处添加   "1112233"
    qDebug()<<s1;
    s1.prepend("000");           //在头处添加   "0001112233"
    qDebug()<<s1;

    QString s2("999");
    s2.insert(1,"666");          //指定位置拼接  "966699"
    qDebug()<<s2;
    qDebug()<<qPrintable(s2);    //966699  去掉打印双引号

    QString s3("444");
    s3=s3+"555";
    qDebug()<<s3;                //多个字符串拼接效率稍低 "444555"

//#include<QStringBuilder>//声明才可使用 % 拼接 用了模板函数QStringBuilder<A,B>
    QString s4("aaa");
    QString s5("bbb");
    QString s6("ccc");    //在%连接时没有拼接操作        而是
    auto s7=s4 % s5 % s6; //在QStringBuilder保留了3个字符串引用,赋值才分配内存
    auto s8=s4 + s5 + s6;
    qDebug()<<s7<<endl<<s8;      //多个字符串拼接效率更高 "aaabbbccc"
#endif
#if 0 //字符串list链表 合并与分割
    //合并
    QStringList list;
    list<<"111"<<"222";
    list.append("333");
    int i=0;
    for(;i<list.size();i++)
    {
        qDebug()<<list[i];//"111" "222" "333"
    }
    //QStringList转成QString类型
    QString s2=list.join(":");//"111:222:333"
    QString s3=list.join("");//"111222333"
    qDebug()<<s2<<s3;
    //分割   以分隔符 将字符串分割成每一项  QString转成QStringList类型
    QString s4("a,a,b,b,,c,c");
    QStringList s5=s4.split(",");//返回7个项 默认空的也为一项
    QStringList s6=s4.split(",",QString::SkipEmptyParts);//返回6个项 空的舍去
#endif
    return app.exec();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值