/*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();
}
QT字符串篇:相关函数
最新推荐文章于 2024-01-19 15:09:24 发布