Qt學習01——字符串類

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);
//返回false
qDebug()<<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()); 
//返回false
qDebug()<<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);
//返回1
qDebug()<<QString::localeAwareCompare(str1,str3);
//返回0
qDebug()<<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();
輸出:

true
true
false
true



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章