【qt】QString字符串

【qt】QString字符串

码农世界 2024-05-13 前端 64 次浏览 0个评论

前言:

这节很轻松,大家可以放心食用 ♪(・ω・)ノ

QString目录

  • 一.与c++String的区别
  • 二.隐式共享
  • 三.初始化
  • 四.判断是否为空串
  • 五.字符串的长度
  • 六.添加字符串
    • 1.尾加
    • 2.任意位置加
    • 七.替换字符串
    • 八.修改字符串
    • 九.删除字符串
      • 1.清空
      • 十.获取子串
        • 1.任意位置获取
        • 2.左获取
        • 3.右获取
        • 十一.分割字符串
        • 十二.转换成c语言字符串
        • 十三.类型转换
          • 1.字符串转整数
          • 2.字符串转小数
          • 十三.小项目 ‘藏头诗’

            一.与c++String的区别

            c++字符串的每个字符,占一个字节

            但是QString每个字符占两个字节。

            这样就完美解决了汉字占两个字节的问题。

            内存变大了,自然好处少不了

            隐式共享就是再此基础上完成的

            二.隐式共享

            #include "mainwindow.h"
            #include "ui_mainwindow.h"
            #include 
            MainWindow::MainWindow(QWidget *parent)
                : QMainWindow(parent)
                , ui(new Ui::MainWindow)
            {
                ui->setupUi(this);
                QString str1="姚国林";
                QString str2=str1;//拷贝构造函数,默认浅拷贝
                qDebug()<
                delete ui;
            }
            

            运行结果:

            想必大家对结果并不意外,最要是内部的实现机制,你知道嘛?不慌下面给大家画一个图!

            QString会多一个用来记录指针指向的计数器

            当我们用str1初始化str2时,会做一个浅拷贝,学过c++的应该都知道,就是指针也指向同一块内存。

            对srt2的值进行修改,如果是浅拷贝,则str1也会被修改,此时,str2会做一个深拷贝,重新开辟一块内存。

            如果现在又让str2赋值给str1,则str2的计数器为2,str1的计数器为0,就会自动销毁这一块内存。

            所以说QString这种隐式共享也被称之为写时复制,会大大的节省开销,如果一样就指向同一块内存,如果不一样,就马上开辟一块内存。

            三.初始化

            可以用=,或者()来进行初始化

            运行结果:

            四.判断是否为空串

            关键字:isEmpty()

            运行结果:

            值得注意的是 “” 是空串,但是 " " 不是空串!

            五.字符串的长度

            三个接口:size(),count(),size()

            运行结果:

            六.添加字符串

            1.尾加

            对字符串进行+=即可

            运行结果:

            还可以append()

            运行结果:

            哈哈你们是大帅哥吗?是的话,评论一个是!

            2.任意位置加

            insert()

            运行结果:

            我真滴服了,我明明是大帅哥。

            运行结果:

            当添加的位置大于原来字符串时,中间会自动补空格。

            七.替换字符串

            replace()

            运行结果:

            默认是区分大小写的!可以加一个Qt::CaseInsensitive不区分大小写替换

            运行结果:

            八.修改字符串

            直接可以用下标进行修改

            运行结果:

            九.删除字符串

            remove()

            运行结果:

            可以指定位置删除,也可以直接查值删除!

            1.清空

            clear()

            运行结果:

            十.获取子串

            1.任意位置获取

            mid()

            运行结果:

            2.左获取

            left()

            运行结果:

            3.右获取

            right()

            运行结果:

            十一.分割字符串

            split(),返回值是一个QStringList容器,后面会讲…

            运行结果:

            十二.转换成c语言字符串

            先转换成标准字符串(toStdString())再转换成c语言的字符串(c_str())

            十三.类型转换

            1.字符串转整数

            toInt(bool,进制)

            运行结果:

            有字母的转换失败!

            还可以转换成16进制:

            运行结果:

            123的16进制就是291

            2.字符串转小数

            toDouble()

            运行结果:

            其他类型转换同理!

            十三.小项目 ‘藏头诗’

            OK,光说不练假把式,现在我们就来做一个自己的小项目。

            先看效果:

            点击生成:

            哈哈,事不宜迟,我们开始吧

            首先ui设计器去设计界面,用到Label,Text Edit,Push Button,Line Edit 这几个组件

            然后在按钮用转到槽

            #include 
            ...
            void MainWindow::on_pushButton_clicked()
            {
                if(ui->textEdit->toPlainText().isEmpty())
                {
                    QMessageBox::information(this,"提示","文本为空,请输入文本",QMessageBox::Ok);
                }
                else
                {
                    QString str=ui->textEdit->toPlainText();
                    QStringList list=str.split('\n');
                    QString ret;
                    for(int i=0;i
                        ret+=list[i].left(1);
                    }
                    ui->lineEdit->setText(ret);
                }
            }
            

            首先判断文本是否为空,为空就出现提示框

            然后将所有文本添加到字符串中,用\n(换行字符)进行分割。

            然后再取子串进行添加,将其设置到行框上即可!

            啊!终于完了,陌生人不知道你何时能看到,加油吧。

            道阻且长,行则将至,我的成长之路。

转载请注明来自码农世界,本文标题:《【qt】QString字符串》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,64人围观)参与讨论

还没有评论,来说两句吧...

Top