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();