Qt 中 QString的用法

C++、QT的字符串比较

C语言没有字符串类型,用字符类型数组来存储字符串,即char a[5],字符串则用双引号“”括起来的字符序列,以’\0’结尾;

C++语言为C语言的超集,完全兼容C语言,故提供了两种字符串的实现:

  • C语言的字符串
  • std::string,即标准模版库中的类

Qt为一种C++架构,除了兼容C++语言的字符串外,又提供了自己的字符串实现:

  • QString不用担心内存分配以及关于'\0'结尾的这些注意事项,采用的是Unicode码,每一个字符为两个字节(16位)

QString包含使用

QString类提供一个unicode字符串

在QT软件开发平台中常用到的一种变量类型

#include <QString>

字符串末尾追加append、+、+=

QString str="hello";
str.append("world");
qDebug() <<str;    //str=hello world

QString str="hello";
str=str+"world";
qDebug() <<str;     //str=hello world

QString str="hello";
str+="world";
qDebug() <<str;     //str=hello world

取出字符串中指定位置的字符---at(n).unicode()

QString str="hello world";
char ch;
ch=str.at(1).unicode();
qDebug() <<ch;   //ch=e

从字符串末尾删除若干个字符---chop(n)

QString str="hello world";
str.chop(2);
qDebug() <<str; //str= hello wor

清空字符串---clear()

QString str="hello world";
str.clear();
qDebug() <<str.size();  //str=""
QString str="hello world";
str="";
qDebug() <<str.size();  //str=""

字符串比较

int x = QString::compare("aUtO", "AuTo", Qt::CaseInsensitive);// x == 0
int y = QString::compare("aUtO", "AuTo", Qt::CaseSensitive);// x > 0
int z = QString::compare("auto", "Car", Qt::CaseSensitive);// y > 0
int k = QString::compare("auto", "Car", Qt::CaseInsensitive);// z < 0
/*CaseInsensitive:不区分大小写  
  CaseSensitive:  区分大小写*/

字符串str1是否包含str2字符串

QString str1 = "Peter Pan";

QString str2 = "peter";
bool ok;

ok=str1.contains(str2,Qt::CaseInsensitive);   
//CaseInsensitive:不区分大小写
qDebug()<<ok;      // returns true

字符串str2在字符串str1中出现过几次

QString str1("abalksdsadlABadddfdaBwAbDFA");
QString str2("aB");
int count1=str1.count(str2,Qt::CaseInsensitive);
int count2=str1.count(str2,Qt::CaseSensitive);
qDebug()<<"count1:"<<count1<<endl;
qDebug()<<"count2:"<<count2<<endl;

判断字符串str是否以字符串str2开头或结尾

QString str3 = "erAcD;akjf;sjf;wekfp'lefogjEraCd";
bool ok1,ok2,ok3,ok4;
ok1=str3.startsWith("eracd",Qt::CaseInsensitive);
ok2=str3.startsWith("erAcD",Qt::CaseSensitive);
qDebug()<<ok1<<endl<<ok2<<endl;

ok3=str3.endsWith("eracd",Qt::CaseInsensitive);
ok4=str3.endsWith("eracd",Qt::CaseSensitive);
qDebug()<<ok3<<endl<<ok4<<endl;

搜索字符串str2在字符串str1第一次出现的位置

QString str4="qazwsxessqwefvtgbyhnujmqwewsxqwee";
    int n1=str4.indexOf("qwe");
    int n2=str4.indexOf("qwe",10);
    int n3=str4.indexOf("qwe",25);
    int n4=str4.indexOf("qwe",31);
    qDebug()<<"n1:"<<n1<<endl;
    qDebug()<<"n2:"<<n2<<endl;
    qDebug()<<"n3:"<<n3<<endl;
    qDebug()<<"n4:"<<n4<<endl;

在字符串str1指定位置中插入str2

QString str5="abcdefg";
str5.insert(5,"123");
qDebug()<<str5<<endl;

判断字符串str是否为空,是否没有字符

bool ok5,ok6,ok7,ok8;
ok5=QString().isEmpty();
ok6=QString("").isEmpty();
ok7=QString("a").isEmpty();
QString str6("abc");
ok8=str6.isEmpty();
qDebug()<<"isEmpty:"<<ok5<<"  "<<ok6<<"  "<<ok7<<"  "<<ok8<<endl;

ok5=QString().isNull();
ok6=QString("").isNull();
ok7=QString("a").isNull();
qDebug()<<"isNULL:"<<ok5<<"  "<<ok6<<"  "<<ok7<<"  "<<endl;

计算字符串str长度

QString str0="1234567890ABCDEF";
int count=str0.length();
qDebug()<<count<<endl;

从字符串str1中指定位置截取字符

QString str7="qazwsxedcrfv789456123";
QString str8=str7.mid(7,4);
qDebug()<<str8<<endl;

QString str9=str7.mid(10);
qDebug()<<str9<<endl;

从字符串str中指定位置开始移除若干个字符

QString str10="1357924680ABCDEFG";
QString str11=str10.remove(4,6);
qDebug()<<str11<<endl;

从str1字符串中指定位置开始替换若干个字符

QString str12="Say Yes";
QString str13("No");
QString str_t=str12.replace(4,3,str13);
qDebug()<<str_t<<endl;

以指定字符对字符串进行分割,将分割后的某一段取出

//从左往右:0,1,2,3,...
//从右往左:...,-3,-2,-1
//分割符号左侧为分割出的内容,如果为空,可以设置跳过
QString csv = "forename,middlename,surname,phone";
QString path = "/usr/local/bin/myapp"; // 第一个字段是空的
QString::SectionFlag flag = QString::SectionSkipEmpty;

//以“,”为分割符,将从左往右的第2段返回
QString str0=csv.section(',',2,2);
qDebug()<<str0<<endl;
//以“,”为分割符,将从左往右的第1段到第2段返回
QString str1=csv.section(',',1,2);
qDebug()<<str1<<endl;

//以“/”为分隔符,将从左往右的第2段到第4段返回
QString str2=path.section('/',2,3);
qDebug()<<str2<<endl;
//以“/”为分隔符,将从左往右的第3段(忽略前面的空字段)
QString str3=path.section('/',3,3,flag);
qDebug()<<str3<<endl;

//以“,”为分割符,将从右往左的第2段到第3段返回
QString str4=csv.section(',',-3,-2);
qDebug()<<str4<<endl;
//以“/”为分隔符,将从右往左的第3段到末尾返回
QString str5=path.section('/',-3);
qDebug()<<str5<<endl;

数字转换成字符串

QString str;
str.setNum(1234);
qDebug()<<str<<endl;

str.setNum(1234,16);
qDebug()<<str<<endl;

str.setNum(123.45678,'e',8);    //e E f 小数点后的位数
qDebug()<<"e:"<<str<<endl;
str.setNum(123.45678,'E',8);
qDebug()<<"E:"<<str<<endl;
str.setNum(123.45678,'f',8);
qDebug()<<"f:"<<str<<endl;

str.setNum(123.45678,'g',6);    //g G 有效数字的位数,省略尾部的0
qDebug()<<"g:"<<str<<endl;
str.setNum(123.40000,'G',6);
qDebug()<<"G:"<<str<<endl;

格式化转化为字符串

QString str;
float Pi=3.14;
str.sprintf("value=%.4f",Pi);
qDebug()<<str<<endl;

float e=2.7128;
QString str1=QString::number(e).sprintf("%.6f",e);
qDebug()<<str1<<endl;

字符串str转化为数值

QString >> double

double d;
bool ok;
d=QString("123,567").toDouble(&ok);
qDebug()<<"ok:"<<ok<<"  "<<"d:"<<d<<endl;

d=QString("123.456").toDouble(&ok);
qDebug()<<"ok:"<<ok<<"  "<<"d:"<<d<<endl;

QString >> float

double d;
bool ok;
QString str("123.456");
d=str.toFloat(&ok);
qDebug()<<"ok:"<<ok<<"  "<<"d:"<<d<<endl;

QString str1("R2D5");
d=str1.toFloat(&ok);
qDebug()<<"ok:"<<ok<<"  "<<"d:"<<d<<endl;

QString >> int

double d;
bool ok;
QString str2("A5");
int vi;
vi=str2.toInt(&ok,10);
qDebug()<<"ok:"<<ok<<"  "<<"vi:"<<vi<<endl;

vi=str2.toInt(&ok,16);
qDebug()<<"ok:"<<ok<<"  "<<"vi:"<<vi<<endl;

将字符串str中所有的字母转化为小写字母或大写字母

//example 1   大写转小写
QString str = "The Qt PROJECT";
str = str.toLower();        // str == "the qt project"
 

//example 2   小写转大写
QString str = "TeXt";
str = str.toUpper();        // str == "TEXT"

QString与中文

#include<QTextCodec>
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));


Qstring  str;
char *ch;
QByteArray ba = str.toLoacl8Bit();

ch=ba.data();

构造函数

QString字符与数字直接转换

字符串格式化

查找定位

添加与插入

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Suuugkh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值