百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

QT-QString类 类风湿性关节炎

bigegpt 2024-10-30 01:51 3 浏览

Qt中的字符串类

介绍

  • 采用Unicode编码
  • 采用隐式共享技术,节省内存和不必要的数据拷贝
  • 隐式共享介于浅拷贝深拷贝之间,当两个string对象赋值时,会实现浅拷贝(共享一块内存),如果某个对象被修改了,则会实现深拷贝(从新开辟内存)
  • 跨平台使用,不需要考虑不同平台的兼容性
  • QString直接支持字符串与数字的相互转换
  • QString直接支持字符串大小比较
  • QString直接支持不同字符编码间的相互转换
  • QString直接支持std::stringstd::wstring的相互转换
  • QString直接支持正则表达式的应用


QString常用函数

static const QChar data[4] = { 0x0055, 0x006e, 0x10e3, 0x03a3 };
QString str(data, 4);    //通过QChar宽字符初始化

str = "hello";     //直接赋值

str.length();    //获取字符串长度

str.size();     //获取字符串数量,等价于length()

str.capacity();   //获取容量,容量包含了当前string里不必增加内存就能使用的字符数

str.isEmpty();      //如果str为空或为0 ,则返回true,否则返回false

str.isNull();    //如果为0,则返回true,否则返回false

str.clear();    //清空str

str. resize(8);    //设置str的字符串长度

str.fill('m');     //将str字符串,全部字符填为'm'

str.fill('m',5);    //填充5个字符'm',并修改str的字符串长度为5

       
str.append("ABC");   //在str字符串末尾附加"ABC"子串

str.prepend("abc");    //在str字符串头部添加"abc"子串
 
str. chop(2);    //从str字符串末尾, 去掉2个字符

str = "Montreal";

str.remove(1, 4);    //从str下标1位置开始,清除4个字符, s = "Meal"

str.setNum(1234.5);    //数字转字符串 str = "1234.5"

double val = str.toDouble();   //字符串转double  val =1234.5
 

/*arg()成员函数:通过string串里通过“%数字”表示argument(参数) */
str = QString("%1,%2,%3,%4,%5,%6")
    .arg("A","B","C")
    .arg("D","E","D");     //字符串参数替换 str1 = "A,B,C,D,E,D"

str = QString("%1,%2")
         .arg(40)   
         .arg(40,0,16);        //将40以16进制转换为字符串,如果想使用大写的话,通过toUpper()函数来实现
                               //还可以这样写QString("%1").arg(cnt,5,10,QChar('0');  //输出00050,表示保留5位有效数字,

floatcnt2=50.12345;
  qDebug()<<QString::asprintf("%.2f",cnt2);  //打印50.12
  

str.sprintf("%d %s",1,"first");    //通过一定参数输出到字符串里, str= "1 first"

str="abcdef";

str.indexOf ("bc");      //return 1

str.indexOf ("bc",1);     //从str下标1的位置查找,return 1

str.indexOf ("bc",2);       //没找到,则return -1

 
str. lastIndexOf("bc");    //反向查找,从str末尾向前查找,return 1
 
str. lastIndexOf("bc",5);    //反向查找,从str下标5的位置向前查找,return 1

str.lastIndexOf("bc",-2);    //反向查找,从str末尾-1的位置向前查找

str.insert( 2, "AB ");     //在str字符串下标2的位置插入"AB "子串
 
str="abcdefgh";

str2 = str.mid(3);    //提取子串,提取出str的下标为3到末尾,给str2
                      
str2 = str.mid(3,4); //从str的下标为3开始,提取4个字符给str2

str = "th!ea minimum";
str.indexOf(QRegExp("[m i!]"), 0);       // 使用正则表达式匹配查找,遇到m, ,i,! 时停止 ,所以return 2

long a = 63;
QString s = QString::number(a, 16);             // s == "3f"

QString t = QString::number(a, 16).toUpper();     // t == "3F"


QString str = "Bananas";
str.startsWith("Ban"); //判断str的开头是否以"Ban"开头,returns true
str.startsWith("Car"); // returns false

常用四则运算符:

【领QT开发教程学习资料,点击下方链接莬费领取↓↓,先码住不迷路~】

点击→领取「链接」

QString str="*+-";
str.indexOf(QRegExp("[+-]"));    //匹配一次+或-,所以return 1

str="*asd12345682";
str.indexOf(QRegExp("23"));      //匹配23成功,return 5

str="*abcsd8de";
str.indexOf(QRegExp("[0-9]"));      //匹配一次0~9数字,所以return 6 

示例-通过四则运算匹配一个范围的数字

比如:

12.5-19.5Kg :提取出12.5 和19.5

125.68m~376.78m :提取出125.68和376.78

999.99美元 :提取出999.99

代码如下:

    QString text = ui->stringText->text();
    QString number1,number2;

    int begin1=text.indexOf(QRegExp("[0-9]"));
    text.remove(0,begin1);
    int begin2=text.indexOf(QRegExp("[^0-9.]"));  //找非0~9,小数点以外的字符位置
    if(begin1==-1)
    {
        qDebug()<<"err";
        return ;
    }

    if(begin2!=-1)          //比如 123XYZ
       number1 = text.left(begin2);
    else        //只有一个数字
    {
         number1 = text;
         qDebug()<<"range:"<<number1.toFloat();
         return ;
    }

    text.remove(0,begin2);
    begin1=text.indexOf(QRegExp("[0-9]"));
    text.remove(0,begin1);
    begin2=text.indexOf(QRegExp("[^0-9.]"));        //找非0~9,小数点以外的字符位置
    if(begin1==-1)  //只有一个数字
    {
        qDebug()<<"range:"<<number1.toFloat();
        return ;
    }

    if(begin2!=-1)          //比如 123XYZ
        number2 = text.left(begin2);
    else
        number2 = text;

    qDebug()<<"range:"<<number1.toFloat()<<"~"<<number2.toFloat();

打印如下:

其它使用:

QByteArray QString::toLocal8Bit () ;
    //获取字节数组对象
char * QByteArray::data ();        //通过字节数组对象的成员data函数,获取char数组
QString("%1").arg(cnt,5,10,QChar('0'

相关推荐

悠悠万事,吃饭为大(悠悠万事吃饭为大,什么意思)

新媒体编辑:杜岷赵蕾初审:程秀娟审核:汤小俊审签:周星...

高铁扒门事件升级版!婚宴上‘冲喜’老人团:我们抢的是社会资源

凌晨两点改方案时,突然收到婚庆团队发来的视频——胶东某酒店宴会厅,三个穿大红棉袄的中年妇女跟敢死队似的往前冲,眼瞅着就要扑到新娘的高额钻石项链上。要不是门口小伙及时阻拦,这婚礼造型团队熬了三个月的方案...

微服务架构实战:商家管理后台与sso设计,SSO客户端设计

SSO客户端设计下面通过模块merchant-security对SSO客户端安全认证部分的实现进行封装,以便各个接入SSO的客户端应用进行引用。安全认证的项目管理配置SSO客户端安全认证的项目管理使...

还在为 Spring Boot 配置类加载机制困惑?一文为你彻底解惑

在当今微服务架构盛行、项目复杂度不断攀升的开发环境下,SpringBoot作为Java后端开发的主流框架,无疑是我们手中的得力武器。然而,当我们在享受其自动配置带来的便捷时,是否曾被配置类加载...

Seata源码—6.Seata AT模式的数据源代理二

大纲1.Seata的Resource资源接口源码2.Seata数据源连接池代理的实现源码3.Client向Server发起注册RM的源码4.Client向Server注册RM时的交互源码5.数据源连接...

30分钟了解K8S(30分钟了解微积分)

微服务演进方向o面向分布式设计(Distribution):容器、微服务、API驱动的开发;o面向配置设计(Configuration):一个镜像,多个环境配置;o面向韧性设计(Resista...

SpringBoot条件化配置(@Conditional)全面解析与实战指南

一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...

一招解决所有依赖冲突(克服依赖)

背景介绍最近遇到了这样一个问题,我们有一个jar包common-tool,作为基础工具包,被各个项目在引用。突然某一天发现日志很多报错。一看是NoSuchMethodError,意思是Dis...

你读过Mybatis的源码?说说它用到了几种设计模式

学习设计模式时,很多人都有类似的困扰——明明概念背得滚瓜烂熟,一到写代码就完全想不起来怎么用。就像学了一堆游泳技巧,却从没下过水实践,很难真正掌握。其实理解一个知识点,就像看立体模型,单角度观察总...

golang对接阿里云私有Bucket上传图片、授权访问图片

1、为什么要设置私有bucket公共读写:互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可...

spring中的资源的加载(spring加载原理)

最近在网上看到有人问@ContextConfiguration("classpath:/bean.xml")中除了classpath这种还有其他的写法么,看他的意思是想从本地文件...

Android资源使用(android资源文件)

Android资源管理机制在Android的开发中,需要使用到各式各样的资源,这些资源往往是一些静态资源,比如位图,颜色,布局定义,用户界面使用到的字符串,动画等。这些资源统统放在项目的res/独立子...

如何深度理解mybatis?(如何深度理解康乐服务质量管理的5个维度)

深度自定义mybatis回顾mybatis的操作的核心步骤编写核心类SqlSessionFacotryBuild进行解析配置文件深度分析解析SqlSessionFacotryBuild干的核心工作编写...

@Autowired与@Resource原理知识点详解

springIOCAOP的不多做赘述了,说下IOC:SpringIOC解决的是对象管理和对象依赖的问题,IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系...

java的redis连接工具篇(java redis client)

在Java里,有不少用于连接Redis的工具,下面为你介绍一些主流的工具及其特点:JedisJedis是Redis官方推荐的Java连接工具,它提供了全面的Redis命令支持,且...