C++ を始めるための stl の 6 つの主要コンポーネント -- 文字列ライブラリ関数の紹介

記事ディレクトリ

1. string クラスを学ぶ理由

1.C言語の文字列

2. 標準ライブラリの文字列クラス

1.文字列クラス

2.文字列クラスの共通インターフェース

1. 文字列クラスオブジェクトの一般的な構造

2. 文字列クラスオブジェクトの容量操作

3. 文字列クラスオブジェクトのアクセスおよびトラバース操作

4. 文字列クラスオブジェクトの変更操作

5.文字列クラスの非メンバ関数

要約する

 


1. string クラスを学ぶ理由

1.C言語の文字列

C 言語では、文字列は \0 で終わる文字の集合です。操作の便宜上、C ライブラリには str 系のライブラリ関数がいくつか用意されていますが、これらのライブラリ関数は文字列から分離されており、 の考え方には準拠していません。 oop. 、その下にあるスペースはユーザーが管理する必要があるため、注意しないと範囲外にアクセスしてしまう可能性があります。

2. 標準ライブラリの文字列クラス

1.文字列クラス

文字列クラスを使用する場合は、#include ヘッダー ファイルをインクルードし、名前空間 std を使用する必要があります。

1. string クラスは、文字列を表す string クラスです。

2. このクラスのインターフェースは基本的に通常のコンテナのインターフェースと同じですが、文字列操作に特化した通常の操作がいくつか追加されています。

3. string の最下層は実際には次のようになります: Basic_string テンプレート クラスのエイリアス

4. マルチバイトまたは可変長の文字シーケンスは操作できません。

2.文字列クラスの共通インターフェース

1. 文字列クラスオブジェクトの一般的な構造

関数名 機能の説明
弦() パラメータなしの構築。空の文字列クラス オブジェクト、つまり空の文字列を構築します。
文字列(const char *s) c-string を使用して文字列クラス オブジェクトを構築する
文字列(定数文字列) 文字列クラスを渡して構築をコピーします
文字列(size_t n,char c) 文字列クラス オブジェクトには n 個の文字が含まれています。 c

説明書:

string s1; //构造一个空的string类对象s1
string s2("hello string"); // 用c字符串构造string类对象s2
string s3(s2) //拷贝构造s3

2. 文字列クラスオブジェクトの容量操作

関数名 機能の説明
サイズ 文字列の有効な文字長を返します。
長さ サイズと同じ、文字列の有効な文字長を返します。
容量 スペースの合計サイズを返します
空の 検出文字列が空の文字列として解放された場合は true を返し、それ以外の場合は false を返します。
クリア 有効な文字を消去しますが、その下のスペースのサイズは変更しません
予約する 文字列用のスペースを確保する
サイズ変更 有効な文字数を n に変更し、余分なスペースを文字 c で埋めます。

説明書:

void test()
{
    string s("hello cplusplus");
    cout<<s.size()<<endl;
    cout<<s.capacity<<endl;
    
    //将s中的字符串清空,清空只是将size清0,不改变底层空间的大小
    s.clear();
    
    //将s中的有效字符增加到20个,多出位置用'a'填充
    s.resize(20,'a');

    
    //将s中有效字符增加到15个,多出位置用缺省值\0填充
    
    s.resize(15);

    string s1;
    
    s1.reserve(100); 
}
  • 予約を使用する場合: 拡張によるオーバーヘッドを回避するために、n 個のスペースを予約できます。予約パラメータが文字列の基になる領域の合計サイズより小さい場合、予約によって容量のサイズは変更されません。

3. 文字列クラスオブジェクトのアクセスおよびトラバース操作

関数名 機能の説明
オペレーター[] const string クラス オブジェクトによって呼び出される、pos 位置の文字を返します。
開始+終了 begin は文字のイテレータを取得します + end は最後の文字の次の位置のイテレータを取得します
r開始+終了 rbegin は最後の文字の次の位置への反復子を取得します + rend は最初の文字への反復子を取得します
範囲用 糖衣構文の一種、C++11 の新しいトラバーサルメソッド

説明書:

void test()
{
    string s("hello cplusplus");
    
    //1.for+operator[]
    for(int i = 0; i<size;++i)
    {
        cout<<s[i]<<endl;
    }

    //2.迭代器  暂时可以将迭代器看成一个指针
    string::iterator it = s.begin();
    while(it!=s.end())
    {
        cout<<*it<<endl;
        ++it;
    }

    //反向迭代器rbegin
    auto rit = s.rbegin();
    while(rit!+s.rend())
    {
        cout<<*rit<<endl;
        ++rit;
    }

    //3.范围for 底层也是用的迭代器
    for(auto ch:s)
    {
        cout<<ch<<end;
    }

4. 文字列クラスオブジェクトの変更操作

関数名 機能の説明
押し戻す 文字列の後に文字を追加します
追加する 文字列の後に文字列を追加します
演算子+= 文字列の後に文字列 str を追加します
c str C 形式の文字列を返します
見つける+npos 文字列内の pos 位置から始まる文字 c を検索し、文字列内の文字の位置を返します。npos は文字列内の静的メンバー変数であり、デフォルト値は -1 です。
探す 文字列の pos 位置から始まる文字 c を検索し、文字列内の文字の位置を返します。
部分文字列 str の pos 位置から開始して、n 文字をインターセプトして返します。

説明書:

void test()
{
    string str("hello");
    str.push_back(' '); //追加一个空格
    str.append("world");
    str +='b';
    str += 'it';


    //通过rfind获取file的后缀 从后往前找
    string file("test.cpp");
    size_t pos = file.rfind('.');
    string suffix(file.substr(pos,file.size()-pos)); //获取后缀给suffix 获取子串,从pos位置向后找,找size-pos个长度 
    
    
       //取出url的域名
      //协议+ 域名 + 资源
      string url("http://www.cpluplus.com/reference/string/string/find/");
      size_t start = url.find("://");
      if(start == npos)
        return ; //无效域名
      start+= 3;
      size_t finish = url.find('/',start);  
      string address = url.substr(start,finsh - start); //取出中间的子串

}
    

5.文字列クラスの非メンバ関数

関数 機能の説明
演算子+ 値による戻り値を使用すると、ディープ コピーの効率が低下します
オペレーター>> 入力演算子のオーバーロード
演算子<< 出力演算子のオーバーロード
ゲットライン 文字列の行を取得します
関係演算子 サイズ比較

要約する

この章では主に string クラスと string クラスのいくつかのインターフェイス関数を紹介します。

おすすめ

転載: blog.csdn.net/jolly0514/article/details/131776208