C++におけるstringタイプのまとめ

31728 ワード

C++のstringタイプのまとめ-陸はこの海で始まり-ブログ園
C++におけるstringタイプのまとめ
 
stringクラスオブジェクトの構造
簡略化されたコンストラクション関数のプロトタイプは次のとおりです(テンプレートの最後のデフォルトパラメータは簡単に省略されています).
1:  explicit basic_string();
2:  string(const char *s);
3:  string(const char *s, size_type n);
4:  string(const string& str);
5:  string(const string& str, size_type pos, size_type n);
6:  string(size_type n, E c);
7:  string(const_iterator first, const_iterator last);

stringオブジェクトの操作
  • 文字列比較は6つの関係演算子(=、!=、>、>=、<、<=)をサポートします.ディクショナリ・ソート・ポリシー(Cの文字列比較ポリシーとまったく同じ)を使用します.6つのリレーショナル・オペレータは非メンバーのリロード・オペレータです.これらの演算子は、string op string、string op const char*、const char*op stringの3つのオペランドの組み合わせをサポートします.(ここでopは、前の6つの関係演算子のいずれか)です.説明:演算子を提供する3つのリロード・バージョンは、主に効率的な観点から考慮され、一時stringオブジェクトの生成を回避します.また、stringクラスは、様々なリロード・バージョンのメンバー関数compareを提供して比較し、関数のプロトタイプを簡略化します.
    1:  int compare(const string& str) const;
    2:  int compare(size_type p0, size_type n0, const string& str);
    3:  int compare(size_type p0, size_type n0, const string& str, size_type pos, size_type n);
    4:  int compare(const char* s) const;
    5:  int compare(size_type p0, size_type n0, const char* s) const;
    6:  int compare(size_type p0, size_type n0, const char* s, size_type n) const;

    戻り値:関数を呼び出すオブジェクトの比較シーケンスがオペランドの比較シーケンスより小さい場合、負の数を返します.等しい場合は0を返します.そうでなければ、正数を返します.
     
  • 文字列加算stringクラスに対して非メンバーリロードoperator+が提供され、stringオブジェクト間、stringオブジェクトとconst char*オブジェクト間、stringオブジェクトとcharオブジェクト間の加算がサポートされ、operator+の両方のオペランドの任意の順序がサポートされています.簡略化された関数のプロトタイプは次のとおりです.
    1:  string operator+ (const string& lhs, const string& rhs);
    2:  string operator+ (const string& lhs, const char *rhs);
    3:  string operator+ (const string& lhs, char rhs);
    4:  string operator+ (const char *lhs, const string& rhs);
    5:  string operator+ (char lhs, const string& rhs);

     
  • 文字列付与文字列付与には、メンバー再ロード演算子operator=;また、メンバーリロード関数assignを使用すると、より柔軟に処理できます.ここでは、簡略化された関数のプロトタイプのみを参照してください.
    1:  string& operator=(char c);
    2:  string& operator=(const char *s);
    3:  string& operator=(const string& rhs);
    4:  string& assign(const char *s);
    5:  string& assign(const char *s, size_type n);
    6:  string& assign(const string& str, size_type pos, size_type n);
    7:  string& assign(const string& str);
    8:  string& assign(size_type n, char c);
    9:  string& assign(const_iterator first, const_iterator last);

     
  • 文字列追加文字列追加には、operator+=;また、メンバー関数appendです.簡略化された関数のプロトタイプは次のとおりです.
    1:  string& operator+=(char c);
    2:  string& operator+=(const char *s);
    3:  string& operator+=(const string& rhs);
    4:  string& append(const char *s);
    5:  string& append(const char *s, size_type n);
    6:  string& append(const string& str, size_type pos, size_type n);
    7:  string& append(const string& str);
    8:  string& append(size_type n, char c);
    9:  string& append(const_iterator first, const_iterator last);

     
  • サブストリングを読み出して、ある下付き文字を取得します.1つはatメンバー関数です.またoperator[]を使用します.サブストリングを取得し、メンバー関数c_を使用できます.strおよびsubstr、メンバー関数dataおよびcopyもあります.簡略化された関数のプロトタイプは次のとおりです.
    1:  reference operator[](size_type pos);
    2:  const_reference operator[](size_type pos) const;
    3:  reference at(size_type pos);
    4:  const_reference at(size_type pos) const;
    5:   
    6:  const char *c_str() const;
    7:  const char *data() const;
    8:  string substr(size_type pos = 0, size_type n = npos) const;
    9:  size_type copy(char *s, size_type n, size_type pos = 0) const;

    注意:at関数のパラメータposが無効な場合、異常out_を放出します.of_range;ただしoperator[]のパラメータposが無効な場合は、未定義の動作に属します.したがってatはoperator[]よりも安全です.ここで、copyは実際のコピーの文字数を返します.
  • 置換サブ列メンバー関数replaceは、あるサブ列の置換を実現する.簡略化された関数のプロトタイプは次のとおりです.
     1:  string& replace(size_type p0, size_type n0, const char *s);
     2:  string& replace(size_type p0, size_type n0, const char *s, size_type n);
     3:  string& replace(size_type p0, size_type n0, const string& str);
     4:  string& replace(size_type p0, size_type n0, const string& str, size_type pos, size_type n);
     5:  string& replace(size_type p0, size_type n0, size_type n, char c);
     6:  string& replace(iterator first0, iterator last0, const char *s);
     7:  string& replace(iterator first0, iterator last0, const char *s, size_type n);
     8:  string& replace(iterator first0, iterator last0, const string& str);
     9:  string& replace(iterator first0, iterator last0, size_type n, char c);
    10:  string& replace(iterator first0, iterator last0, const_iterator first, const_iterator last);

    ここで、文字列全体を得るには、これらの関数を使用する必要があります.
    1:  const_iterator begin() const;
    2:  iterator begin();
    3:  const_iterator end() const;
    4:  iterator end();

     
  • 挿入文字列メンバー関数insertは、ある点で文字列を挿入することを実現する.簡略化された関数のプロトタイプは次のとおりです.
    1:  string& insert(size_type p0, const char *s);
    2:  string& insert(size_type p0, const char *s, size_type n);
    3:  string& insert(size_type p0, const string& str);
    4:  string& insert(size_type p0, const string& str, size_type pos, size_type n);
    5:  string& insert(size_type p0, size_type n, char c);
    6:  iterator insert(iterator it, char c);
    7:  void insert(iterator it, const_iterator first, const_iterator last);
    8:  void insert(iterator it, size_type n, char c);

    注意:insert関数は、挿入ポイント(p 0 or it)の前に文字列を挿入します.
  • サブストリングメンバー関数eraseを削除すると、サブストリングの削除が実現されます.簡略化された関数のプロトタイプは次のとおりです.
    1:  iterator erase(iterator first, iterator last);
    2:  iterator erase(iterator it);
    3:  string& erase(size_type p0 = 0, size_type n = npos);

    指定された削除された文字数が、文字列内の指定された位置から始まる残りの文字数よりも多い場合、これらの文字だけが削除されます.
  • サブストリングを検索するには6つの方法があり、それぞれ5種類のメンバー関数が対応しています.・findは、制御文字シーケンスにおいて操作文字シーケンスと一致する最初のサブ列を検索し、サブ列の開始位置を返す.・rfindは、制御文字シーケンスにおける操作文字シーケンスと一致する最後のサブ列を検索し、逆検索に相当するサブ列の開始位置を返す.                · find_first_of操作文字シーケンスに最初に表示される文字の位置を検索し、その位置を返します.                · find_first_not_of操作文字シーケンスに表示されない最初の文字の位置を検索し、その位置を返します.                · find_last_of制御文字シーケンスの最後の操作シーケンスに現れる文字の位置を検索し、その位置を返す.                · find_last_not_of操作文字シーケンスに表示されない最後の文字位置を検索し、その位置を返します.これらの関数の検索に失敗した場合はstring::nposを返します.ここでfind関数の簡略化関数のプロトタイプは以下の通りである.
    1:  size_type find(char c, size_type pos = 0) const;
    2:  size_type find(const char *s, size_type pos = 0) const;
    3:  size_type find(const char *s, size_type pos, size_type n) const;
    4:  size_type find(const string& str, size_type pos = 0) const;

    他の5つの関数の関数プロトタイプはfindの関数プロトタイプと類似しており、逆順序で検索された関数(rfind,find_last_of,find_last_not_of)である場合、posパラメータのデフォルト値はnposとなる.
  • その他のメンバー関数と友元関数
     1:  size_type capacity() const;   //               >=size()
     2:   void reserve(size_type n = 0);//   n        ,  capacity()>=n
     3:   bool empty() const;           //       ,  true
     4:   size_type size() const;       //       ?
     5:   size_type length() const;     //   size()
     6:   size_type max_size() const;   //  string          
     7:   void resize(size_type n, char c = ' '); //     ,  c       ;  size()  n
     8:  void swap(string& str);      // string    ,         (       allocator    ,         )
     9:  
    10:  //        
    11:  istream& getline(istream& is, string& str);
    12:  istream& getline(istream& is, string& str, char delim);
    13:  ostream& operator<<(ostream& os, const string& str);
    14:  istream& operator>>(istream& is, const string& str);

    そのうち、istream&getline(istream&is、string&str);istream&getline(istream&is,string&str,char delim=')に相当する.getline関数は、以下の3つの場合に抽出を終了します.1)ファイル終了子に遭遇しました.2)セパレータdelimに遭遇しました.1番目が区切り文字であるstrが空の列(ストリームから読み出されて破棄する)であるがistreamテストが真である場合;3)istream.max_size()文字が抽出された場合、抽出は終了し、istreamが呼び出される.setstate(ios_base::failbit)、すなわち、この時点で返されるistreamテストが偽である.関数が文字(セパレータを含む)に抽出されていない場合、istream.setstate(failbit)が呼び出され、テストistreamが偽になります.デフォルトでは、istream&operator>(istream&is、const string&str);抽出を終了するには、次の3つのケースがあります.1)ファイルの終了記号に遭遇しました.2)空白文字(スペース、Tab、改行)に遭遇する;3)is.max_size()文字を抽出した場合、またはisを抽出する.width()(0以外の場合)文字です.空白文字を含むファイル終了文字が抽出されていない場合はistream.setstate(failbit)が呼び出され、テストistreamが偽になります.たとえば、次のループを見てみましょう.
    1:  while(cin >> word) 
    2:  { 
    3:      cout << "word read is: " << word << '
    '
    ;
    4:  }

    上のループを中止するには、Win-Ctrl+Z Unix-Ctrl+Dと入力行の最初の文字がファイル終了文字で、ループを終了するには車に戻ります.