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