Qt学习01——字符串类

来源:互联网 发布:黎活明 知乎 编辑:程序博客网 时间:2024/09/21 06:35

Pr:标准C++提供的字符串有两种:
1、以”\0“结尾的字符数组;
2、字符串类string。Qt使用的字符串类QString,保存16位Unicode值,除了操作、查询、转换函数,还使用了隐式共享并优化内存分配策略。

操作字符串

一、操作符“+”、“+=”

QString str1 = "Welcome ";QString str2 = str1 + "to "; //str2 = "Welcome to "QString str2 += "Qt "; //str2 = "Welcome to Qt "

二、QString::append()

QString str3 = "world";str2.append(str3);//str3 = "Welcome to Qt world"

三、 QString::sprintf()

str.springf("%s%s",str1,"to Qt World"); //str = "Welcome to Qt world"

四、 QString::arg()

arg()相比sprintf()更好。它类型安全,完全支持Unicode,允许"%n"改变顺序。
QString str1 = "Welcome ";QString str2 = "to "+"you.";QString str4 = QString(str1+" was born in "+str2).arg(str1).arg(str2);//str4 = "Welcome to you."QString str5 = QString("%1 love %2").arg("I").arg("You");//str5 = "I love You"QString str6 = QString("%2 love %1").arg("me").arg("You");//str6 = "You love me"


五、 其他方法:

1、insert(): 在原字符串指定位置插入另一个字符串;

2、prepend(): 在原字符串的开头插入另一个字符串;

3、replace(): 用指定字符串代替原字符串某些字符。

4、去除空白字符(回车符"\n"、换行符"\r"、制表符"\t"、空格符" "):

①QString::trimmed(): 移除字符串两端空白字符

②QString::simplified(): 移除字符串两端空白字符,并使用单个空格字符“ ”代替空白字符。

QString str1 = "   Welcome \t to \n you!   ";QString str2;QString str3;str2 = str1.trimmed();str3 = str1.simplified();ui->textBrowser->append(str1);ui->textBrowser->append(str2);ui->textBrowser->append(str3);

 

查询字符串

一、 QString::startsWith()

判断一个字符串是否以某个字符串开头。函数的两个参数分别指定字符串和是否大小写敏感(默认敏感)。
QString str1 = "Welcome to you!";qDebug()<<str1.startsWith("welcome",Qt::CaseSensitive);//返回falseqDebug()<<str1.startsWith("welcome",Qt::CaseInsensitive);//返回true

二、 QString::endsWith()

判断一个字符串是否以某个字符串结尾。用法同String::startsWith()。

三、QString::contains()

判断一个字符串是否包含某个字符串。用法同String::startsWith()。

四、比较两个字符串的大小

1、运算符函数 operator <= (const QString&)

<=可替换称<、>、==等比较运算符。从第一个字符开始比较,比较的是ASCII的值。
QString str1 = "Welcome to you!";QString str2 = "Wel";QString str3 = "w";qDebug()<<str1.operator <= (str2.toLatin1()); //返回falseqDebug()<<str1.operator <= (str3.toLatin1()); //返回true

2、静态函数 QString::localeAwareCompare(const QString &s1, const QString &s2)

对s1和s2进行比较,如果s1小于、等于或者大于s2,就返回小于、等于或者大于0的整数。这个比较是基于本地字符集的,并且平台相关的。通常使用这个函数可以把排好序的字符串列表呈现给用户。
QString str1 = "Welcome to you!";QString str2 = "A";QString str3 = "Welcome to you!";QString str4 = "X";qDebug()<<QString::localeAwareCompare(str1,str2);//返回1qDebug()<<QString::localeAwareCompare(str1,str3);//返回0qDebug()<<QString::localeAwareCompare(str1,str4);//返回-1

3、静态函数 QString::compare(const QString &s1, const QString &s2, Qt::CaseSensitivity cs = Qt::CaseSensitive)

用法类似localeAwareCompare,大小写比较完全基于字符的Unicode编码,而且十分迅速。

  

字符串的转换

一、QString::toInt()

将字符串转换为整数。类似还有toDouble()、toFloat()、toLong()等。

    QString str1 = "40";    QString str2 = "40";    QString str3 = "040";    bool ok;    qDebug()<<str1.toInt(&ok,16);    qDebug()<<ok;    qDebug()<<str2.toInt(&ok,10);    qDebug()<<ok;    qDebug()<<str3.toInt(&ok,0);    qDebug()<<ok;
QString::toInt()有2个参数,分别返回转换状态和设置转换基数。当基数为0时使用C语言转换方法,即“0”开头基数默认为8,“0x”为16,其他均为10。

二、字符编码集转换函数

QString的字符编码集转换函数将会返回一个由构造函数QByteArray(const char*)构造的const char*类型的QByteArray对象,既可以存储原始字节,也可以存储以“\0”结尾的8位字符串。转换函数由一下几种:

1、toAscii()

返回一个ASCII编码的8位字符串。在Qt 5以上版本中已经移除这个函数,可用toLatin1()代替。

2、toLatin1()

返回一个Latin-1(ISO8869-1)编码的8位字符串。

3、toUtf8()

返回一个UTF-8编码的8位字符串。

4、toLocal8Bit()

返回一个系统本地编码(比如我用的Win10中文版,编码是GBK。如果是英文版就是UTF-8)的8位字符串。

    QString str1 = "Hello World!";    QByteArray ba = str1.toLatin1();    qDebug()<<str1.toLatin1();       qDebug()<<ba;    qDebug()<<ba.append("Saluton!");    qDebug()<<ba.data();

三、QString的NULL与Empty(空)字符串

①NULL字符串是使用默认构造函数或者“(const char*)0”作为参数的构造函数创建的QString字符串对象;

②Empty则是一个大小为0的字符串。

NULL字符串一定是一个空字符串,空字符串不一定是NULL字符串。

例如:

qDebug()<<QString().isNull();qDebug()<<QString().isEmpty();qDebug()<<QString("").isNull();qDebug()<<QString("").isEmpty();
输出:

truetruefalsetrue



原创粉丝点击