QString字符串操作


前言

前沿没啥要说的,这文章就是我看QT6开发指南和看b站up主爱编程的大丙qt视频说记录的笔记

1.1QString字符串操作

1.1.1QString简介

QString用来存储字符串,没有父类。存储的是一串字符,每个字符都是Qchar类型,,使用的是UTF-16编码,一个字符包含两个字节数据。对于超过65535的Unicode编码,QString使用两个连续的QChar字符表示。一个汉字是一个字符。

1.1.2QString字符串的创建和出初始化

//传递一个const char *类型的数据

QString str="hello QT";

1.1.3QString字符串的索引

使用[]或者接口函数at()访问每个字符

QString str="dimple,地灵殿";
    qDebug()<<str<<'\n';        //dimple,地灵殿
    QChar ch0=str[0];
    qDebug()<<ch0<<'\n';        //'d'
    QChar ch7=str.at(7);
    qDebug()<<ch7<<'\n';       //'\u7075'按理来说应该输出一个’地‘

1.2QChar的功能

1.2.1QChar类的主要接口函数

函数原型功能
 bool isDigit() const判断字符是否为0~9的数字
 bool isLetter() const判断字符是否为字母
 bool isLetterOrNumber() const判断字符是否为字母或数字
 bool isLower() const判断字符是否为小写字母
 bool isUpper() const判断字符是否为大写字母
 bool isMark() const判断字符是否为记号
 bool isNonCharacter() const判断字符是否为非文字字符
 bool isNull() const判断字符编码是否为0X000,也就是“\0”
 bool isNumber() const判断字符是否为一个数,不仅仅包括0~9
 bool isPrint() const判断字符是否为可打印字符
 bool isPunct() const判断字符是否为标点符号
 bool isSpace() const判断字符是否为分隔符,包括空格、制表符
 bool isSymbol() const判断字符是否为特殊符号(打不出来啊)
 char toLatin1() const返回与QChar字符等效的Latin1字符
 QChar toLower() const返回字符小写,不是字符就返回本身
 QChar toUpper() const返回字符大写,不是字符就返回本身
 char16_t unicode() const返回字符的16位Unicode编码数值

1.2.2QChar字符与Latin1字符转换

只有当QChar字符的编码为0~255时,函数toLatin1才有意义。

  • 还有两种转换方式:
  1. 静态函数         QChar fromLatin1(char c)
  2. 构造函数         QChar(char ch) 

QString str="dimple,地灵殿";

 QChar chP=QChar::fromLatin1('P');         //静态函数,记得是单引号
    //QChar chP=QChar('P')                        //构造函数
    str[0]=chP;
    qDebug()<<str<<'\n';

1.2.3QChar字符的Unicode编码

  • 还有两种转换方式:
  1. 静态函数          QChar fromUcs2(char16_t c)
  2. 构造函数          QChar(char16_t ch)

 QString str="dimple,地灵殿";

     str[7]=QChar(0x9752);                        //‘青’
    str[8]=QChar::fromUcs2(0x5C9B);        //‘岛’
    qDebug()<<str<<'\n';

不能直接传递大于255范围的数据,比如str[7]=QChar(‘青’); 

1.2.4QChar的逻辑运算符

QString HuStr="河to湖";                       //临时字符串,获取河和湖
    QChar He=QChar::fromUcs2(HuStr[0].unicode());//获取‘河‘的UTF-16编码,再构造QChar字符
    QChar Hu=QChar(HuStr[3].unicode());          //获取‘湖‘的UTF-16编码,再构造QChar字符
    QString str="他们来着河南或者河北";
    for(int i=0;i<str,sizr();i++)               //循环每一个字符,把河替换为湖
    {
        if(str.at(i)==He)
        {
            str[i]=Hu;
        }
    }

1.3QChar主要功能测试

//每个字符的Unicode按钮
void Widget::on_pushButton_getchars_clicked()
{

    QString str=ui->Editstr->text();        //读取输入的字符串
    if(str.isEmpty())                       //判断字符串是否为空
        return;
    ui->plainTextEdit->clear();             //清空文本框之前的内容
    for(qint16 i=0;i<str.size();i++)
    {
        QChar ch=str.at(i);                 //获取单个字符
        char16_t uniCode=ch.unicode();      //获取QChar字符的UTF-16编码
        QString chStr(ch);                  //将QChar字符转换为QString字符串
        QString info=chStr+QString::asprintf("\t,Unicode编码=0x%X",uniCode);
        ui->plainTextEdit->appendPlainText(info);
    }
}
//每个字符的特性判断
void Widget::on_pushButton_CharJudge_clicked()
{
    QString str=ui->Editchar->text();       //读取输入的字符
    if(str.isEmpty())
        return;
    QChar ch=str[0];                        //提取第一个字符
    char16_t uniCode=ch.unicode();          //获取QChar字符的UTF-16编码
    QString chStr(ch);                      //将QChar字符转换为QString字符串
    QString info=chStr+QString::asprintf("\t,Unicode编码=0x%X",uniCode);
    ui->plainTextEdit->appendPlainText(info);
    //使用QChar的接口函数判断字符的特性
    ui->checkdigiit->setChecked(ch.isDigit());
    ui->checkLetter->setChecked(ch.isLetter());
    ui->checkLetterOrNumber->setChecked(ch.isLetterOrNumber());
    ui->checkLower->setChecked(ch.isLower());
    ui->checkMark->setChecked(ch.isMark());
    ui->checkPunct->setChecked(ch.isPunct());
    ui->checkSpace->setChecked(ch.isSpace());
    ui->checkSymbol->setChecked(ch.isSymbol());
    ui->checkUpper->setChecked(ch.isUpper());
}
//与Latinl的转换
void Widget::on_pushButton_ConvLatinl_clicked()
{
    QString str=ui->Editstr->text();        //取输入框的内容
    if(str.isEmpty())                       //判断字符串是否为空
        return;
    ui->plainTextEdit->clear();             //清空输出框
    for(int i=0;i<str.size();i++)
    {
        QChar ch=str.at(i).toLatin1();                 //获取单个变换过的字符
        ui->plainTextEdit->appendPlainText(ch);         //输出变换过的字符
    }
}
//与UTF-16的转换
void Widget::on_pushButton_ConvUTF16_clicked()
{
    QString str=ui->Editstr->text();        //取输入框的内容
    if(str.isEmpty())                       //判断字符串是否为空
        return;
    ui->plainTextEdit->clear();             //清空输出框
    for(int i=0;i<str.size();i++)
    {
        QChar ch=str.at(i);                 //获取单个字符
        char16_t ch16=ch.unicode();
        QString info=QString::asprintf("Unicode编码=0x%X",ch16);
        ui->plainTextEdit->appendPlainText(info);         //输出变换过的字符
    }
}
/QChar的比较与替换
void Widget::on_pushButton_compare_clicked()
{
    QString str=ui->Editstr->text();            //获取要被替换的字符串
    QString str1=ui->Editchar->text();           //获取要被替换的字符
    ui->plainTextEdit->clear();         //清空输出框
    ui->plainTextEdit->appendPlainText(str);//输出原文,用来比较
    QChar ch=str1[0];
    QChar lin('A');
    for(int i=0;i<str.size();i++)
    {
        if(str.at(i)==ch)                 //遍历字符串,将需要替换的替换为A
            str[i]=lin;
    }
    ui->plainTextEdit->appendPlainText("\n"+str);
}
//清空文本框
void Widget::on_pushButton_Clear_clicked()
{
    ui->plainTextEdit->clear();
}

1.4QString字符串的常用操作

1.4.1字符串拼接

使用加号运算符拼接

QString str1="洋洋",str2="得意";
    QString str3=str1+str2;
    qDebug()<<str3<<'\n';

使用append()在当前字符串后面添加字符串,函数prepend()在当前字符串前面添加字符串

QString str1="洋洋",str2="得意";
    QString str3=str1;
    str1.append(str2);
    qDebug()<<str3<<'\n';           //洋洋得意
    str3.prepend(str2);
    qDebug()<<str3<<'\n';           //得意洋洋

1.4.2字符串截取

函数作用
QChar front() const返回字符串第一个字符
 QChar back() const返回字符串最后一个字符
 QString left(qsizetype n) const提取边n个字符
 QString right(qsizetype n) const提取边n个字符
QString first(qsizetype n) const提取前面n个字符,QT6
QString last(qsizetype n) const提取后面n个字符,QT6
QString mid(qsizetype pos,qsizetype n=-1)返回字符串中部分字符串
 QString sliced(qsizetype pos, qsizetype n) const返回字符串中部分字符串,QT6
  QString section(const QString &sep, qsizetype start, qsizetype end = -1, QString::SectionFlags flags = SectionDefault) const提取以sep做分隔符,从start到end段的字符串

1.4.3存储相关的函数

函数作用
 bool isEmpty() const判断字符串是否为空,区别在于只有未被赋值时isNull才返回true,例如空字符串(“\0”)就不行
  bool isNull() const
 qsizetype count() constcount不带参数就是统计字符个数,带参数的话可以统计某个字符串在当前字符串中出现的次数
 qsizetype length() const返回字符串中的字符个数
 qsizetype size() const
 void clear()清空当前字符串
 void resize(qsizetype size)改变字符串长度,大于则扩充,小于则缩减,多余字符丢失
 QString &fill(QChar ch, qsizetype size = -1)将字符串替换为新内容,并可改变字符串长度

1.4.4搜索和判断

函数作用
 qsizetype indexOf(const QString &str, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const在当前字符串查找某个字符首次最后出现的位置,参数cs指的是是否区分大小写,CaseSensitive区分、CaseInsensitive不区分
 qsizetype lastIndexOf(const QString &str, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
 bool contains(QStringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const判断当前字符串是否包含某个字符串
 bool endsWith(QStringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const判断是否以某个字符串开头
 bool startsWith(QStringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const判断是否以某个字符串结尾
qsizetype count() const带参数的话可以统计某个字符串在当前字符串中出现的次数,可以统计是否区分大小写

1.4.5 字符串转换和修改

函数作用
 QString toUpper() const全部转换为大写字母
 QString toLower() const全部转换为小写字母
 QString trimmed() const去掉字符串首尾空格
 QString simplified() const不仅去掉字符串首尾空格,还会把中间连续空格用单个空格代替
 void chop(qsizetype n)去掉字符串末尾n个字符
 QString &insert(qsizetype position, const QString &str)在某个位置插入一个字符串
 QString &replace(qsizetype pos, qsizetype n, const QString &after)从字符串pos位置开始替换n个字符,替换后的字符串的after,还可以实现替换某种字符串,可以设置是否区分大小写
 QString &remove(qsizetype pos, qsizetype n)从pos位置开始移除n个字符,可以实现移除某种字符串

1.5QString字符串常用功能测试

只展示其中一段代码

void Widget::showBoolInfo(QString str, bool CheackValue)
{
    if(CheackValue)
    {
        ui->plainTextEdit->appendPlainText(str+"=true");
    }else{
        ui->plainTextEdit->appendPlainText(str+"=false");
    }
}

//这一段代码是isNull和isEmpty按钮的槽函数代码
void Widget::on_pushButton_4_clicked()
{
    ui->plainTextEdit->appendPlainText("/n=======isNull()函数测试");
    QString str1,str2="";
    ui->plainTextEdit->appendPlainText("QString str1,str2""");
    showBoolInfo("str1.isNull()",str1.isNull());
    showBoolInfo("str1.isEmpty()",str1.isEmpty());
    showBoolInfo("\nstr2.isNull()",str2.isNull());
    showBoolInfo("str2.isEmpty()",str2.isEmpty());
    str2.clear();
    ui->plainTextEdit->appendPlainText("\n=====str2.clear()后");
    showBoolInfo("\nstr2.isNull()",str2.isNull());
    showBoolInfo("str2.isEmpty()",str2.isEmpty());
}

1.6QString字符串与数值转换

1.6.1字符串转换为整数和浮点数

函数作用
 int toInt(bool *ok = nullptr, int base = 10) const把字符串转换为对应的返回值
uint toUInt(bool *ok = nullptr, int base = 10) const
 long toLong(bool *ok = nullptr, int base = 10) const
 ulong toULong(bool *ok = nullptr, int base = 10) const
 short toShort(bool *ok = nullptr, int base = 10) const
 ushort toUShort(bool *ok = nullptr, int base = 10) const
 qlonglong toLongLong(bool *ok = nullptr, int base = 10) const
  uqlonglong toULongLong(bool *ok = nullptr, int base = 10) const
float toFloat(bool *ok=nullptr)
double toDouble(bool *ok=nullptr)

变量ok如果不为null,就作为是否转换成功的返回变量。false表示转换失败,true表示转换成功。
base表示转换的进制,也可以设置为0,使用c语言标示法。

1.6.2函数setNum()

函数setNum用于将整数或者浮点数转换为字符串

整数转化为字符串

QString &setNum(int n ,int base=10)

将整数n转换为字符串,base是转换为 什么进制的字符串

浮点数转化为字符串

QString &setNum(double n,char format='g',int precision=6)

n代表要转换的浮点数,format是格式字符,precision表示精度位数

格式字符格式字符含义精度位数的含义
e科学计数法,用小写字母e基数的小数点后的有效位数
E科学计数法,用小写字母e基数的小数点后的有效位数
f自然计数法小数点后的有效位数
g使用e或者f,那种简洁用哪种小数点前后的数字位数之和
G使用E或者F,那种简洁用哪种小数点前后的数字位数之和

1.6.3静态函数number()

该函数其参数形式与功能与成员函数setNum()相似

 QString number(long n, int base = 10)

QString number(double n, char format = 'g', int precision = 6)

1.6.4静态函数asprintf()

用于构造格式化输出各种数据的字符串,类似于标准从语言的printf()函数

 QString asprintf(const char *cformat, ...)

cformat是格式化字符串后面可以跟任意多个变量。

注意:替换格式化字符串%s只能用UTF_8编码的字符串,而且替换%s的只能是char*类型的字符串(使用(字符串).toLocal18Bit.data()达到这个效果)

1.6.5函数arg()

用于格式化输出各种数据的字符串,功能与asprintf()类似

//int输入数据的函数原型 

QString arg(int a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' ')) const

a是要转换为字符串的整数

fieldWidth是转换成的字符串占用的最小空格数

base是转换成的字符串显示进制

fillchar是当fieldWidth大于实际数位宽度时使用的填充字符,默认使用空格

使用arg输出代表代表字符串的变量时字符串中可以有汉字

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值