C++跨平臺庫QT學習5 字串處理類QString

2020-08-12 22:39:46

一、QString封裝的一些方法

QString提供了支援Unicode的字串處理方法。
標頭檔案:

#include <QString> 

qmake設定:

QT += core

1. 初始化與空值判斷

	// 建立一個空的字串,length=0
    QString string;
    // 上面一句預設執行的就是下面 下麪的構造方法
    string = QString((const char *)0);
    // isNull 輸出true
    qDebug() << string.isNull() << endl;
    // length 輸出0
    qDebug() << string.length() << endl;
    // isEmpty 輸出true
    qDebug() << string.isEmpty() << endl;
    // 下面 下麪空字串不是null,輸出false
    qDebug() << QString("").isNull() << endl;
    // 下面 下麪空字串,輸出true
    qDebug() << QString("").isEmpty() << endl;    

2. 長度

QString b="Hello";
// 下面 下麪長度輸出5
qDebug() << b.length() << endl();

3. 字串組合與格式化

	QString c="Hello";
	// 下面 下麪組合字串,輸出Hello World
	qDebug() << c.append(" World") << endl();
	// 在前面插入字元
	qDebug() << c.prepend(" ") << endl();
	// 字串格式化輸出
    QString firstName( "Zhang" );
    QString lastName( "San" );
    QString fullName;
    fullName = QString( "First name is %1, last name is %2" ).arg( firstName, lastName );
    // 與下面 下麪一句等價
    fullName = QString( "First name is %1, last name is %2" ).arg( firstName).arg(lastName );    
    // 輸出 "First name is Zhang, last name is San" 
    qDebug() << fullName << endl;
    

4. 索引

    const QString string( "Hello World!" );
    // 輸出第3個位置的字元
    qDebug() << string.at(3) << endl;
    
    // 判斷是否包含目標字串
	QString str1="Hello my world";
	// N=true,不區分大小寫
	bool N1=str1.contains ("he", Qt::CaseInsensitive) ; 
	// N=false,區分大小寫
	bool N2=str1.contains ("he", Qt::CaseSensitive) ;  
	
	// 判斷開頭和結尾
	QString str2="Hello my world";
	bool N3=str2.endsWith ("ld", Qt::CaseInsensitive) ; // N=true,不區分大小寫
	bool N4=str2.endsWith ("LD", Qt::CaseSensitive) ; // N=false,區分大小寫
	bool N5=str2.startsWith ("he") ; // N=true,預設爲不區分大小寫

5. 其它一些方法

  • toUpper() :轉大寫
  • toLower():轉小寫
  • count()、size() 和 length() :獲取長度,一個漢字算兩個字元
  • trimmed() :去掉字串首尾的空格
  • simplified() :去掉字串首尾的空格,當中的連續空格用一個空格代替
  • indexOf(),lastIndexOf:找目標字串的位置
  • isNull():是否未賦值
  • isEmpty():是否空值
  • left():從左邊取一定數量字元
  • right():從右邊取一定數量字元
  • section():使用指定字串分割,取第n個分段

二、型別轉換

	// 字串轉整形
   QString string("10");
   int b = string.toInt();
	// 字串轉浮點
	QString string("10.2");
	float b = string.toFloat();

格式化輸出:

    QString string("10");
    float b = string.toFloat();
    string=string.asprintf ("%.3f",b);
    qDebug() << string << endl;
    
// 以下幾句等價
str=QString::number(total,'f',2);
str=QString::asprintf ("%.2f", total);
str=str.setNum(total,'f',2);
str=str.sprintf ("%.2f,total);

其它一些型別轉換方法:

// 轉整型
int toInt(bool * ok = Q_NULLPTR, int base = 10) const
long toLong (bool * ok = Q_NULLPTR, int base = 10) const
short toShort (bool * ok = Q_NULLPTR, int base = 10) const
uint toUInt (bool *ok = Q_NULLPTR, int base = 10) const
ulong toULong (bool *ok = Q_NULLPTR, int base = 10) const

// 轉浮點型
double toDouble(bool *ok = Q_NULLPTR) const
float toFloat (bool * ok = Q_NULLPTR) const

三、進位制轉換

// 程式原型
Qstring &setNum (int n, int base = 10)
QString number (int n, int base = 10)
// 範例1,10進位制轉16進位制、2進位制顯示
    QString str("15");
    int val=str.toInt();//預設爲十進制
    // str=QString::number(val, 16);//轉換爲十六進制的字串
    str=str.setNum (val, 16); //十六進制
    str=str.toUpper();
    // 下面 下麪輸出F
    qDebug() << str << endl;
    str=str.setNum (val, 2) ; //二進制
    // 下面 下麪輸出1111
    qDebug() << str << endl;

// 範例2,二進制轉十進制、十六進制
    QString str("1111");
    bool ok;
    int val = str.toInt(&ok, 2);
    
    QString str1=QString::number (val, 10) ;//數位顯示爲十進制字串
    // 輸出15
    qDebug() << str1 << endl;
    QString str2=str.setNum (val, 16) ; //顯示爲十六進制
    str2=str2.toUpper();
    // 輸出F
    qDebug() << str2 << endl;