【qt】QString字符串

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

一.与c++String的区别

c++字符串的每个字符,占一个字节
但是QString每个字符占两个字节。

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

内存变大了,自然好处少不了
隐式共享就是再此基础上完成的

二.隐式共享

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QString str1="姚国林";
    QString str2=str1;//拷贝构造函数,默认浅拷贝
    qDebug()<<str1;
    qDebug()<<str2;
    str2[2]='A';//深拷贝,不然str1的值也会被改变
    qDebug()<<str1;
    qDebug()<<str2;
    str1=str2;//str1又指向str2,str1的内存自动销毁
    qDebug()<<str1;
    qDebug()<<str2;
}

MainWindow::~MainWindow()
{
    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 <QMessageBox>
...
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<list.size();i++)
        {
            ret+=list[i].left(1);
        }

        ui->lineEdit->setText(ret);
    }

}

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

在这里插入图片描述

然后将所有文本添加到字符串中,用\n(换行字符)进行分割。
然后再取子串进行添加,将其设置到行框上即可!

啊!终于完了,陌生人不知道你何时能看到,加油吧。
道阻且长,行则将至,我的成长之路。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值