Qt常用クラス(3)——QString


QStringクラスはQtで文字列を表すクラスであり,QtCore共有ライブラリに実装される.QStringクラスは実装上以下の特徴がある.
1)文字列はUnicode内部符号化を採用し,世界の多くの言語の文字を表すことができる.
2)文字列には参照カウントが格納されており、1つのQStringオブジェクトが別のQStringオブジェクトにコピーされると、実際には同じ記憶領域を指し、1つの参照カウントを増やすだけである.
3)「オンデマンド・レプリケーション」の技術を採用し、同じ記憶領域を指す複数のQStringオブジェクトのうちの1つが修正されると、本当に1つの新しい文字列がコピーされ、修正される.
こうぞう
QStringクラスでは、多くの異なるプロトタイプの構造関数が使用しやすいように提供されています.次のようになります.
Qstring();                                        //       
QString(QChar ch);                           //   QChar    ch  
QString(const QChar *pch, int size);    //   QChar   pch  ,size      
QString(const QString &obj);              //       
QString(const char *str);                  //       str   ,str        

これらのコンストラクション関数が存在するため、QStringクラスをパラメータとして使用できる場所であれば、QCharオブジェクトや通常の文字列を安全に使用することができます.
と判断
QStringオブジェクトが空の文字列であるかどうかは、次のメンバー関数で判断できます.
bool isEmpty() const;    //          

へんかん
QStringクラスには、次のような文字列を数値に変換するための関数がたくさんあります.
double toDouble(bool *ok = 0) const;                                     //          
float toFloat(bool *ok = 0) cosnt;                                          //       
int toInt(bool *ok, int base = 10) const;                                 //       
long toLong(bool *ok, int base = 10) cosnt;                            //       
short toShort(bool *ok, int base = 10) const;                          //       
uint toUInt(bool *ok = 0; int base = 10) const                         //          
ulong toLong(bool *ok = 0, int base = 10) const;                     //            
ushort toUShort(bool *ok = 0, int base = 10) const;                 //           

これらの関数はQStringオブジェクトの内容を解析し,それを対応する数値に変換することができる.OKパラメータは、変換が成功したかどうかの情報を出力するためのbool型変数を指す.baseパラメータは整数タイプに変換するときのベースです.これらの関数はQStringオブジェクト自体を変更しません. 
注意:文字列が0 xで始まると、変換のベースは自動的に16に変換され、文字列が0で始まると、変換のベースは自動的に8になります.
次のメンバー関数では、数値を文字列に変換してQStringオブジェクトの値に設定できます.
QString &setNum(int n, int base = 10);                                           //    
QString &setNum(uint n, int base = 10);                                         //       
QString &setNum(long n, int base = 10);                                        //    
QString &setNum(ulong n, int base = 10);                                       //        
QString &setNum(short n, int base = 10);                                       //     
QString &setNum(ushort n, int base = 10);                                      //        
QString &setNum(double n, char format = 'g', int precision = 6);          //       
QString &setNum(float n, char format = 'g', int precision = 6);            //    

浮動小数点数を文字列に変換する場合、formatパラメータは変換フォーマットを指定し、precisionパラメータは変換結果の精度を指定し、有効な配列の個数を指定します.これらの関数はQStringオブジェクト自体の値を変更することに注意してください.次の関数は、新しい一時オブジェクトを返して使用するための異なる方法を採用しています.
QString number(int n, int base = 10);
QString number(uint n, int base = 10);
QString number(long n, int base = 10);
QString number(ulong n ,int base = 10);
QString number(double n, char format = 'q', int precision = 6);

これらの関数はすべて静的メンバー関数であるため、特定のオブジェクトに関係なくクラス名で直接呼び出すことができます.
QStringクラスには、次のような大文字と小文字の変換機能もあります.
QString toLower() const;    //      
QString toUpper() const;    //      

これらの関数は、QStringオブジェクト自体を変更するのではなく、変換された結果を戻り値とします.
比較
QStringクラスは、2つのQStringオブジェクトの比較に使用する関数を提供します.
int compare(const QString &s1, const QString &s2, Qt::CaseSensitivity cs = Qt::CaseSensitive);

これは、s 1とs 2のサイズを比較できる静的メンバー関数であり、パラメータcsには以下の2つの値があります.
Qt::CaseInsensitive:          
Qt::Casesensitive :            

戻り値の意味は、0より大きいs 1がs 2より大きいことを示し、0はs 1がs 2に等しいことを示し、0より小さいs 1がs 2より小さいことを示す.
QStringクラスでは、使いやすいように、次のようなリロード関数も使用できます.
int compare(const QString &other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;

この関数は、QStringオブジェクト自体とQStringオブジェクトotherを比較するために使用します.
実際には、QStringクラスの比較オペレータを使用して、次のように直感的です.
bool operator < (StringType other) const;        //        other 
bool operator <= (StringType other) const;      //          other
bool operator == (StringType other) const;      //        other
bool operator > (StringType other) constt;       //        other
bool operator >= (StringType other) const;      //          other
bool operator != (StringType other) const;       //         other

ここでStringTypeとは、(const QString&)または(const char*)のことで、兄は、これらの操作子をQStringオブジェクトと比較してもよいし、普通の文字列と比較してもよいということです.これらの限界は、最初のオペランドがQStringオブジェクトである必要があることであり、Qtでは次のオペレータが定義されています.
bool operator < (const char *s1, const QString &s2);                 //    s1      s2
bool operator <= (const char *s1, const QString &s2);               //    s1        s2
bool operator == (const char *s1, const QString &s2);               //    s1      s2
bool operator > (const char *s1, const QString &s2);                 //    s1      s2
bool operator >= (const char *s1, const QString &s2);               //    s1        s2
bool operator != (const char *s1, const QString &s2);                //    s1       s2

これらのオペレータはQStringクラスのメンバーではなく、最初のパラメータは通常の文字列です.
        
次のメンバー関数を使用して、QStringオブジェクトに指定した文字列または文字が含まれているかどうかを判断します.
bool contains(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;      
bool contains(cosnt ch, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;

次のメンバー関数を使用して、QStringオブジェクトに特定の文字列または文字が含まれている個数を取得します.
int count(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
int count(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;

QStringオブジェクト内の特定の文字列または文字が表示される場所を、次のメンバー関数で取得します.
int indexOf(const QString &str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
int indexOf(QChar ch, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;

ここでパラメータfromは検索の開始点であり、負数、-iは最後からi番目の文字を表すことができる.探している方向は行き先からです.戻り値は、検索された文字列または文字の場所であり、見つからない場合は-1を返します.
QStringクラスには、この機能に似た関数があり、文字列または文字を後方から検索します.
int lastIndexOf(const QString &str, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
int lastIndexOf(QChar ch, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

      
文字列処理
QStringクラスでは、以下のように宣言された割り当てオペレータによるオブジェクトのコピーがサポートされています.
QString &operator = (const QString &other);        //        QString   
QString &operator = (const char *str);               //        
QString &operator = (char ch);                         //     
QString &operator = (QChar ch);                       //    QChar    

次のメンバー関数では、QStringオブジェクトの後ろに別の文字列または文字を接続して、全体的な文字列を作成できます.
QString &append(const QString &str);                //    QString   
QString &append(const char *str);                    //        
QString &append(QChar ch);                            //    QChar    

これらの戻り値はQStringオブジェクト自身の参照であり、つまり、この戻り値でメンバー関数を再度呼び出し、連続した文字列接続操作を形成することができる.
コードをより直感的にするために、QStringクラスでは、文字列へのオペレータの接続も定義されています.
QString &operator += (const QString &other);     //    QString   
QString &operator += (const char *str);    //        
QString &operator += (char ch);    //        
QString &operator += (QChar ch);   //    QChar   

それらの機能はappendと同じです.C++言語では、割り当てオペレータと複合割り当てオペレータの戻り値を左の値として使用できるため、それらの戻り値もQStringオブジェクト自身の参照として設計されるため、連続的に操作することもできる.ただし、複合付与オペレータの結合順序は右から左であるため、左のオペランドを計算するにはカッコを付ける必要があります.
        
append関数と同様に、次のメンバー関数は、別の文字列または文字をQStringオブジェクトに接続できますが、元の文字列の前に接続します.
QString &prepend(const QString &str);          //       QString   
QString &prepend(const char *str);              //           
QString &prepend(QChar ch);                      //       QChar   

より一般的な機能は、QStringオブジェクトの任意の場所に、次のような別の文字列または文字を挿入することです.
QString &insert(int position, const QString &str);                   //      
QString &insert(int position, const QChar *pch, int size);         //    QChar   
QString &insert(int position, QChar ch);                               //    QChar   

ここでpositionパラメータは挿入する位置であり,戻り値もQStringオブジェクト自身への参照である. 
挿入とは反対に、QStringオブジェクトの一部を削除します.たとえば、次のようにします.
QString &remove(int position, int n);
       
この関数では、QStringオブジェクトの位置positionから始まるn文字を削除できます.次の2つのメンバー関数では、QStringオブジェクトから指定した文字列または文字を削除できます.
QString &remove(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive);
QString &remove(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive);

QStringオブジェクトの置換は次のとおりです.
QString &replace(int position, int n, const QString &after);                    // QString   
QString &replace(int position, int n, const QChar *pch, int size);            // QChar   
QString &replace(int opsition, int n, QChar after);                                // QChar   

この3つの関数の機能は、QStringオブジェクトのpositionから始まるn文字を新しいコンテンツに置き換えることであり、新しいコンテンツはそれぞれQStringオブジェクト、QChar配列、QCharオブジェクトで表される.
次のメンバー関数では、指定した文字列または文字を検索して置換を開始できます.
QString &replace(const QString &before, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive);      // QString     QString
QString &replace(QChar ch, cosnt QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive);                       // QChar     QString
QString &replace(QChar before, QChar after, Qt::CaseSensitivity cs = Qt::CaseSensitive);                              // Qchar     QChar

次のメンバー関数は、QStringオブジェクトの内容を空の文字列にすることができます.
void clear();

次のメンバー関数は、QStrringオブジェクト、すなわち指定された場所を削除したすべての内容を遮断します.
void truncate(int position);      //     position   ,   0    

次のメンバー関数は、QStringオブジェクトの最後の文字をカットします.
void chop(int n);     //       n   

次のメンバー関数は、QStringオブジェクトのサブ文字列を取得します.
QString left(int n) const;      //      n           
QString right(int n) const;    //      n           
QString mid(int position, int n = -1) const;  //          

中間からサブ文字列を得る場合、パラメータpositionはサブ文字列の開始位置であり、パラメータnは文字列の個数であり、nが-1であれば元の文字列の末尾までを表す.
なお、上記3つの関数は、QStringオブジェクト自体を変更するのではなく、使用のために一時オブジェクトを返します.
次のメンバー関数では、QStringオブジェクトの先頭と末尾の空白文字を切り取ることができます.
QString trimmed() const;
         
空白の文字には、スペース、リターン、改行、タブなどの文字が含まれます.次のメンバー関数では、QStringオブジェクトの先頭と末尾の空白文字を削除するだけでなく、中間の連続する複数の空白文字をすべて1つのスペースに置き換えることができます.
QString simlified() const;

加算オペレータは、2つの文字列または文字を接続し、QString一時オブジェクトとして返すことができます.
const QString operator+(const QString &s1, const QString &s2);       
const QString operator+(const QString &s1, const char *s2);
const QString operator+(const char s1, const QString &s2);
const QString operator+(const QString &s, char ch); 

加算オペレータの2つのオペランドのうち少なくとも1つがQStringオブジェクトである必要があります.そうしないと、オペレータを再ロードできません.明らかに、加算操作サブはQStringクラスのメンバーではありません.    
        
索引
QStringクラスも通常の文字列のように、下付き文字に基づいてある位置の文字を得ることができます.
const QChar at(int position) const;

これはメンバー関数です.より直感的な方法は、次のオペレータです.
const QChar operator[] (int position) const;
const QChar operator[] (uint position) const;

これにより、QStringオブジェクトの文字取得操作は、1つの文字配列の操作と同様になります.実際には、【】オペレータによって得られる文字は、他の2つのリロードされた【】オペレータに使用されるように変更することもできます.
QCharRef operator[] (int position);
QCharRef operator[] (uint position);

返されるQCharRefクラスは補助クラスであり、その変更は元の文字列に反映されます.
統計
次の2つのメンバー関数は、QStringオブジェクトの文字の数を得ることができます.
int size() const;
int length() const;

文字の個数がバイト数に等しいとは限らないことに注意してください.