C ++文字列クラスの使用方法

How Use C String Class



文字列リテラルは、ヌル文字 0で終了する定数配列ポインタ内の文字のシーケンスです。変数によって識別されると、文字列リテラルの長さを実際に増減することはできません。文字列リテラルに対して多くの操作を実行することはできません。したがって、文字列クラスが必要です。 C ++文字列クラスは、データ構造、つまり文字のシーケンスのコレクション用であり、メンバー関数と演算子が文字を操作できるようにします。文字列クラスでは、文字列リテラルだけでなく、対応する文字列リテラルに対してより多くの操作を行うことができます。この記事を理解するには、文字列リテラルに関する十分な知識が必要です。

クラスとオブジェクト

クラスは、連携して機能する変数と関数のセットです。ここで、変数には値が割り当てられていません。変数に値が割り当てられると、クラスはオブジェクトになります。同じクラスに異なる値を指定すると、オブジェクトも異なります。つまり、異なるオブジェクトは、異なる値を持つ同じクラスです。クラスからオブジェクトを作成することは、オブジェクトをインスタンス化すると言われています。







名前、文字列はクラスです。文字列クラスから作成されたオブジェクトには、プログラマーが選択した名前が付いています。



クラスからオブジェクトをインスタンス化するには、クラスに属する関数が必要です。 C ++では、その関数の名前はクラスの名前と同じです。クラスから作成(インスタンス化)されたオブジェクトには、プログラマーによって異なる名前が付けられています。



クラスからオブジェクトを作成するということは、オブジェクトを作成することを意味します。また、インスタンス化することも意味します。





文字列クラスを使用するC ++プログラムは、ファイルの先頭にある次の行から始まります。

#含む
#含む
名前空間stdを使用する;

最初の行は入出力用です。 2行目は、プログラムが文字列クラスのすべての機能を使用できるようにすることです。 3行目では、プログラムが標準の名前空間の名前を使用できるようにします。



関数のオーバーロード

2つ以上の異なる関数シグネチャが同じ名前を持っている場合、その名前はオーバーロードされていると言われます。 1つの関数が呼び出されると、引数の数とタイプによって、実行される関数が決まります。

工事

ストリング()
次のステートメントは、文字のない長さゼロの文字列を作成します。

文字列strCol=ストリング(()。;

クラスの名前(オブジェクトタイプ)、文字列で始まります。この後に、プログラマーによって指定されたオブジェクト文字列の名前が続きます。代入演算子は次のとおりです。次に、括弧が空のコンストラクターの名前。ここで、strColは、すべてのデータメンバー(プロパティ)とメンバー関数(メソッド)を持つインスタンス化されたオブジェクトです。
string(str)
これは上記と似ていますが、コンストラクターで引数として文字列リテラルまたは識別子のいずれかを取ります。次のステートメントはこれを示しています。

文字列strCol=ストリング(('愛してます')。;

イニシャライザリストを使用した構築

次のコードはこれを示しています。

文字列strCol=ストリング(({{'私''''NS''また''v''と''''と''また'「u」' 0'})。;

文字列リテラルは私があなたを愛しています。イニシャライザリストの最後にあるヌル文字に注意してください。

string(str、n)

これにより、別の文字列の最初のn文字の文字列コレクションが形成されます。次のコードはこれを示しています。

charNS[] = '愛してます';
文字列strCol=ストリング((NS 6)。;
費用<<strCol<< 'NS';

出力は、I loveyouの最初の6文字でIloveです。覚えておいてください:単一のスペースは文字です。

string(str、pos、n)

これにより、別の文字列のゼロベースのインデックス付き位置posから始まる、n文字の文字列コレクションが形成されます。次のコードはこれを示しています。

charNS[] = '愛してます';
文字列strCol=ストリング((NS 2 4)。;
費用<<strCol<< 'NS';

出力は、愛です。

上記の2つのケースでは、nが文字列のサイズより大きい場合、out_of_range例外がスローされます。後で参照してください。

string(n、 ‘c’)

n文字のコレクションを形成します。ここで、すべての文字は同じです。検討、

文字列strCol=ストリング((5'と')。;
費用<<strCol<< 'NS';

出力は、eeeee、5eです。

文字列の割り当て

両方の文字列を宣言した後、文字列を次のように割り当てることができます。

文字列strCol1=ストリング(('愛してます')。;
文字列strCol2;
strCol2=strCol1;
費用<<strCol2<< 'NS';

出力は、私はあなたを愛しています。

イテレータを使用した構築

イテレータは、コレクションの値を通じて、スキャンの一般的な表現を提供します。イテレータを使用して文字列を作成するための構文は次のとおりです。

レンプレート<クラスInputIterator>>
basic_string((InputIterator開始InputIterator終了 constアロケータ
=アロケータ(()。)。;

これにより、範囲[begin、end)の文字列が作成されます。詳細は後で参照してください。

文字列を破壊する

文字列を破棄するには、スコープから外します。

文字列クラス要素へのアクセス

インスタンス化された文字列オブジェクトは、配列のようにサブスクリプト(インデックス)を付けることができます。インデックスのカウントはゼロから始まります。

stringName [i]

演算stringName [i]は、iの文字(要素)への参照を返します。NS文字コレクションのインデックス。次のコードはvを出力します。

文字列strCol=ストリング(('愛してます')。;
charch=strCol[4];
費用<<ch<< 'NS';

stringName [i] const

文字列オブジェクトが定数オブジェクトの場合、stringName [i]の代わりにstringName [i] const操作が実行されます。たとえば、次のコードで使用されます。

const文字列strCol=ストリング(('愛してます')。;
charch=strCol[4];
費用<<ch<< 'NS';

式は、iへの定数参照を返しますNS文字列オブジェクトの要素。文字列のどの要素も変更できません。

下付き文字を使用した文字の割り当て

次のように、文字を非定数文字列オブジェクトに割り当てることができます。

文字列strCol=ストリング(('電話する')。;
strCol[2] = 'NS';
費用<<strCol<< 'NS';

出力は私が落ちるです。 「c」は「f」に変更されました。

stringName.at(i)

stringName.at(i)はstringName [i]に似ていますが、stringName.at(i)の方が信頼性が高くなります。次のコードは、その使用方法を示しています。

文字列strCol=ストリング(('愛してます')。;
charch=strCol。((4)。;
費用<<ch<< 'NS';

at()は、実際には文字列クラスのメンバー関数です。

stringName.at(i)const

stringName.at(i)constはstringName [i] constに似ていますが、stringName.at(i)constの方が信頼性が高くなります。文字列オブジェクトが定数文字列オブジェクトの場合、stringName.at(i)の代わりにstringName.at(i)constが実行されます。たとえば、次のコードで使用されます。

const文字列strCol=ストリング(('愛してます')。;
charch=strCol。((4)。;
費用<<ch<< 'NS';

at()constは、実際には文字列クラスのメンバー関数です。

at()関数を使用した値の割り当て

次のように、at()関数を使用して、値を非定数文字列オブジェクトに割り当てることができます。

文字列strCol=ストリング(('電話する')。;
strCol。((2)。 = 'NS';
費用<<strCol<< 'NS';

出力は私が落ちるです。

サブスクリプトの問題

サブスクリプト(インデックス作成)の問題は、インデックスが範囲外の場合、間違った結果が得られたり、実行時にエラーが発生したりする可能性があることです。

フロント()

これにより、要素を削除せずに、文字列オブジェクトの最初の要素への参照が返されます。次のコードの出力は「I」です。

文字列strCol=ストリング(('愛してます')。;
charch=strCol。フロント(()。;
費用<<ch<< 'NS';

文字は文字列オブジェクトから削除されません。

front()const

文字列オブジェクトの構築の前にconstが付いている場合、front()の代わりに式front()constが実行されます。たとえば、次のコードで使用されます。

const文字列strCol=ストリング(('愛してます')。;
charch=strCol。フロント(()。;
費用<<ch<< 'NS';

定数参照が返されます。要素は文字列オブジェクトから削除されません。定数文字列オブジェクトの文字は変更できません。

戻る()

これにより、要素を削除せずに、文字列オブジェクトの最後の要素への参照が返されます。次のコードの出力は「u」です。

文字列strCol=ストリング(('愛してます')。;
charch=strCol。戻る(()。;
費用<<ch<< 'NS';

back()const

文字列オブジェクトの構築の前にconstが付いている場合、back()の代わりに式back()constが実行されます。たとえば、次のコードで使用されます。

const文字列strCol=ストリング(('愛してます')。;
charch=strCol。戻る(()。;
費用<<ch<< 'NS';

定数参照が返されます。要素は文字列オブジェクトから削除されません。

文字列容量

size_typecapacity()const noexcept

文字列が再割り当てを必要とせずに保持できる文字の総数は、この容量メンバー関数によって返されます。このためのコードセグメントは次のとおりです。

文字列strCol=ストリング(()。;
int1つに=strCol。容量(()。;
費用<<1つに<< 'NS';

私のコンピューターの出力は15です。

リザーブ(n)

フリーストアでは、メモリスペースが常に利用できるとは限りません。予備のスペースは事前に予約できます。次のコードセグメントについて考えてみます。

文字列strCol=ストリング(('愛')。;
strCol。予約((6)。;
費用<<strCol。容量(()。 << 'NS';

私のコンピューターの出力は15です。

size()const noexcept

これは、文字列の文字数を返します。次のコードは次のことを示しています。

文字列strCol=ストリング(('愛してます')。;
int1つに=strCol。サイズ(()。;
費用<<1つに<< 'NS';

出力は10で、nul、 0文字は含まれていません。

length()const noexcept

-サイズと同じ(()。
ノートサイズ(()。 <=容量(()。

シュリンク_to_fit()

再割り当てを発生させることにより、capacity()をsize()に減らすことができます。義務ではありません。次のコードはこれを示しています。

文字列strCol=ストリング(('愛してます')。;
strCol。予約((12)。;
strCol。シュリンクトゥフィット(()。;
intNS=strCol。サイズ(()。;
費用<<NS<< 'NS';

出力は10であり、12または16ではありません。関数はvoidを返します。

サイズ変更(sz)、サイズ変更(sz、 ’c’)

これにより、文字列のサイズが変更されます。新しいサイズが古いサイズよりも小さい場合、最後の方の要素が消去されます。新しいサイズが長い場合は、最後にデフォルトの文字が追加されます。特定の文字を追加するには、2つの引数を指定してresize()関数を使用します。次のコードセグメントは、2つの関数の使用法を示しています。

文字列strCol=ストリング(('愛してます')。;
strCol。サイズ変更((6)。;
費用<< 'strColの新しいサイズ:' <<strCol。サイズ(()。 << 'NS';
文字列strCol1=ストリング(('私は愛する' 'と')。;
strCol1。サイズ変更((12)。;
費用<< 'strCol1の新しいサイズ:' <<strCol1。サイズ(()。 << 'NS';

出力は次のとおりです。

strColの新しいサイズ:6
strCol1の新しいサイズ:12
関数はvoidを返します。

clear()noexcept

次のコードセグメントが示すように、文字列からすべての要素を削除します。

文字列strCol=ストリング(('愛してます')。;
strCol。クリア(()。;
費用<<strCol。サイズ(()。 << 'NS';

出力は0です。関数はvoidを返します。

empty()const noexcept

これは、文字列オブジェクトに文字がない場合はtrueの場合は1を返し、文字列オブジェクトが空でない場合はfalseを返します。次のコードはこれを示しています。

文字列strCol1=ストリング(('愛してます')。;
費用<<strCol1。空の(()。 << 'NS';
文字列strCol2=ストリング(()。;
費用<<strCol2。空の(()。 << 'NS';

出力は次のとおりです。

0
1

イテレータと文字列クラスを返す

イテレータはポインタに似ていますが、ポインタよりも多くの機能を備えています。

begin()noexcept

次のコードセグメントのように、文字列オブジェクトの最初の文字(要素)を指すイテレータを返します。

文字列strCol=ストリング(('愛してます')。;
basic_string<char> ::イテレータiter=strCol。始める(()。;
費用<< *iter<< 'NS';

出力は「I」です。イテレータを受け取る宣言が宣言されている方法に注意してください。イテレータは、ポインタが逆参照されるのと同じ方法で、値を取得するために戻り式で逆参照されます。

begin()const noexcept;

文字列オブジェクトコレクションの最初の要素を指すイテレータを返します。オブジェクト構築の前にconstが付いている場合、式begin()constがbegin()の代わりに実行されます。この状態では、オブジェクト内の対応する要素を変更することはできません。たとえば、次のコードで使用されます。

const文字列strCol=ストリング(('愛してます')。;
basic_string<char> ::const_iteratoriter=strCol。始める(()。;
費用<< *iter<< 'NS';

出力は「I」です。今回は、返されたイテレータを受け取るために、イテレータだけでなくconst_iteratorが使用されていることに注意してください。

end()noexcept

文字列オブジェクトの最後の要素のすぐ先を指すイテレータを返します。次のコードセグメントについて考えてみます。

文字列strCol=ストリング(('愛してます')。;
basic_string<char> ::イテレータiter=strCol。終わり(()。;
費用<< *iter<< 'NS';

最後の要素以外に具体的な要素がないため、出力はnullです。これは何もありません。

end()const noexcept

文字列オブジェクトの最後の要素のすぐ先を指すイテレータを返します。文字列オブジェクトの構築の前にconstが付いている場合、end()の代わりに式end()constが実行されます。次のコードセグメントについて考えてみます。

const文字列strCol=ストリング(('愛してます')。;
basic_string<char> ::const_iteratoriter=strCol。終わり(()。;
費用<< *iter<< 'NS';

出力はnullです。今回は、返されたイテレータを受け取るために、イテレータだけでなくconst_iteratorが使用されていることに注意してください。

逆反復

実際の終わりから最初の要素の直前まで反復するイテレータを持つことができます。

rbegin()noexcept

次のコードセグメントのように、文字列インスタンス化されたオブジェクトの最後の要素を指すイテレータを返します。

文字列strCol=ストリング(('愛してます')。;
basic_string<char> ::reverse_iteratoriter=strCol。rbegin(()。;
費用<< *iter<< 'NS';

出力は「u」です。逆イテレータを受け取る宣言が宣言されている方法に注意してください。イテレータは、ポインタが逆参照されるのと同じ方法で、値を取得するために戻り式で逆参照されます。

rbegin()const noexcept;

文字列オブジェクトの最後の要素を指すイテレータを返します。オブジェクト構築の前にconstが付いている場合、rbegin()の代わりに式rbegin()constが実行されます。この状態では、オブジェクト内の対応する要素を変更することはできません。この機能は、たとえば次のコードで使用されます。

const文字列strCol=ストリング(('愛してます')。;
basic_string<char> ::const_reverse_iteratoriter=strCol。rbegin(()。;
費用<< *iter<< 'NS';

出力は「u」です。今回は、reverse_iteratorだけでなく、const_reverse_iteratorを使用して、返されたイテレーターを受信して​​いることに注意してください。

レンダリング()noexcept

文字列オブジェクトの最初の要素の直前を指すイテレータを返します。次のコードセグメントについて考えてみます。

文字列strCol=ストリング(('愛してます')。;
basic_string<char> ::reverse_iteratoriter=strCol。作る(()。;
費用<< *iter<< 'NS';

最初の要素の直前に具象要素がないため、出力はnullですが、これは何もありません。

render()const noexcept

文字列オブジェクトの最初の要素の直前を指すイテレータを返します。オブジェクト構築の前にconstが付いている場合、式rend()constがrend()の代わりに実行されます。次のコードセグメントについて考えてみます。

const文字列strCol=ストリング(('愛してます')。;
basic_string<char> ::const_reverse_iteratoriter=strCol。作る(()。;
費用<< *iter<< 'NS';

出力はnullです。今回は、reverse_iteratorだけでなく、const_reverse_iteratorを使用して、返されたイテレーターを受信して​​いることに注意してください。

文字列修飾子

文字列オブジェクトを変更する修飾子は、イテレータを取得または返すこともできます。

追加

basic_stringオペレーター+ =((constbasic_stringNS)。

右側の文字列オブジェクトを左側の文字列オブジェクトに追加します。例:

文字列strCol1=ストリング(('私は愛する')。;
文字列strCol2=ストリング((' あなた')。;
strCol1+ =strCol2;
費用<<strCol1<< 'NS';

出力は私があなたを愛しています。 strCol1 + = strCol2はstrCol1 = strCol1 + strCol2と同じであることを忘れないでください。

basic_string&operator + =(const charT * s)

文字列リテラルを文字列オブジェクトコレクションに追加します。例:

文字列strCol=ストリング(('私は愛する')。;
strCol+ = ' あなた';
費用<<strCol<< 'NS';

出力:愛しています。

basic_string&operator + =(charT c)

オブジェクト文字列に1文字を追加します。例:

文字列strCol=ストリング(('愛してるゼ')。;
strCol+ = 「u」;
費用<<strCol<< 'NS';

出力:愛しています。

basic_string&operator + =(initializer_list)

イニシャライザリストを追加します。例:

文字列strCol=ストリング(('私は愛する')。;
strCol+ = {{'''と''また'「u」' 0'};
費用<<strCol<< 'NS';

出力:愛しています。文字初期化子リストの最後にnul、 0を追加することは常に良いことです。

basic_string&append(const basic_string&str)

引数文字列オブジェクトをメイン文字列オブジェクトに追加します。例:

文字列strCol1=ストリング(('私は愛する')。;
文字列strCol2=ストリング((' あなた')。;
strCol1。追加((strCol2)。;
費用<<strCol1<< 'NS';

出力:愛しています。

basic_string&append(const charT * s)

文字列リテラル引数をメイン文字列に追加します。例

文字列strCol=ストリング(('私は愛する')。;
strCol=strCol。追加((' あなた')。;
費用<<strCol<< 'NS';

出力:愛しています。

basic_string&append(ini​​tializer_list)

引数であるイニシャライザリストをメイン文字列に追加します。例:

文字列strCol=ストリング(('私は愛する')。;
strCol=strCol。追加(({{'''と''また'「u」' 0'})。;
費用<<strCol<< 'NS';

出力:愛しています。イニシャライザリストの最後にnul、 0文字を追加することをお勧めします。

basic_string&append(size_type n、charT c)

同じ文字のnを追加します。例:

文字列strCol=ストリング(('タブ')。;
strCol=strCol。追加((2 'また')。;
費用<<strCol<< 'NS';

出力:タブー。

basic_string&append(const charT * s、size_type n)

文字列リテラルの最初のn個の要素をメインの文字列オブジェクトに追加します。例:

文字列strCol=ストリング(('私は愛する')。;
strCol=strCol。追加((「あなたはそう」 4)。;
費用<<strCol<< 'NS';

出力は次のとおりです。愛しています。 nがリテラルの長さより大きい場合、length_error例外がスローされます。

basic_string&append(const basic_string&str、size_type pos、size_type n = npos)

インデックス、posからメイン文字列にn文字を追加します。例:

文字列strCol=ストリング(('私は愛する')。;
strCol=strCol。追加(('ve you so' 2 4)。;
費用<<strCol<< 'NS';

出力:愛しています。ここでも例外がスローされます。後で参照してください。

割り当て

basic_string割当((constbasic_stringNS)。

引数文字列オブジェクトをメイン文字列に割り当て、そこにあったすべてのコンテンツを置き換えます。

文字列strCol1=ストリング(('愛してます')。;
文字列strCol2=ストリング((「彼女は私を必要としている」)。;
strCol1=strCol1。割当((strCol2)。;
費用<<strCol1<< 'NS';

出力:彼女は私を必要としています。

basic_string割当((constチャート*NS)。

文字列リテラル引数をメイン文字列に割り当て、そこにあったすべてのコンテンツを置き換えます。

文字列strCol=ストリング(('愛してます')。;
strCol=strCol。割当((「彼女は私を必要としている」)。;
費用<<strCol<< 'NS';

出力:彼女は私を必要としています。

basic_string割当((initializer_list<チャート>>)。

イニシャライザリスト引数をメイン文字列に割り当てますそこにあったコンテンツを置き換えます。
[cc lang='NS'逃げた='NS'=「780」]
文字列strCol=ストリング(('愛してます')。;
strCol=strCol。割当(({{'NS''NS''と''''NS''と''と''NS''NS''''NS''と'' 0'})。;
費用<<strCol<< 'NS';

出力:彼女は私を必要としています。文字列リテラルを形成するには、文字リストの最後に常にヌル文字 0を追加することをお勧めします。

basic_string割当((constチャート*NSsize_type n)。

文字列リテラル引数の最初のn文字をメイン文字列に割り当て、そこにあったすべてのコンテンツを置き換えます。

文字列strCol=ストリング(('愛してます')。;
strCol=strCol。割当((「彼女は私を必要としている」 9)。;
費用<<strCol<< 'NS';

出力:彼女は必要です。

basic_string割当((size_type nチャートc)。

同じ文字のn個の引数をメイン文字列に割り当て、そこにあったすべてのコンテンツを置き換えます。

文字列strCol=ストリング(('愛してます')。;
strCol=strCol。割当((4 'と')。;
費用<<strCol<< 'NS';

出力:eeee

basic_string割当((constbasic_stringNSsize_type pos
size_type n=npos)。

posから始まる文字列オブジェクト引数のn文字をメイン文字列に割り当て、そこにあったすべてのコンテンツを置き換えます。

文字列strCol=ストリング(('愛してます')。;
strCol=strCol。割当((「彼女は私を必要としている」 4 5)。;
費用<<strCol<< 'NS';

出力:ニーズ。例外をスローします–後で参照してください。

挿入

basic_string入れる((size_type pos constbasic_stringNS)。

文字列オブジェクト引数をメイン文字列のインデックスposに挿入します。

文字列strCol1=ストリング(('愛してます')。;
文字列strCol2=ストリング((「憎しみと」)。;
strCol1=strCol1。入れる((2strCol2)。;
費用<<strCol1<< 'NS';

出力:私はあなたを憎み、愛しています。例外をスローします–後で参照してください。

basic_string入れる((size_type pos1 constbasic_string
NSsize_type pos2size_type n=npos)。

文字列オブジェクト引数のpos2からメイン文字列のインデックスpos1までn文字の長さを挿入します。

文字列strCol1=ストリング(('愛してます')。;
文字列strCol2=ストリング((「憎しみ、欲求、必要性」)。;
strCol1=strCol1。入れる((2strCol2 6 9)。;
費用<<strCol1<< 'NS';

出力:私はあなたが欲しいと愛しています。

イテレータ挿入(const_iterator p、charT c)

引数である特定の文字を、イテレータが指す位置に挿入します。新しく挿入された文字の位置のイテレータを返します。

文字列strCol=ストリング(('愛してます')。;
basic_string<char> ::イテレータiter=strCol。始める(()。;
++iter; ++iter; ++iter; ++iter; ++iter; ++iter;
basic_string<char> ::イテレータ通信網=strCol。入れる((iter 'NS')。;
費用<< *通信網<< 'NS';
費用<<strCol<< 'NS';

出力は次のとおりです。

'NS'

私はあなたを愛していました

イテレータ挿入(const_iterator p、size_type n、charT c)

引数の同じ文字のnを、イテレータが指す位置に挿入します。新しく挿入された同じ文字の先頭の位置のイテレータを返します。

文字列strCol=ストリング((「土地のタブ。」)。;
basic_string<char> ::イテレータiter=strCol。始める(()。;
++iter; ++iter; ++iter;
basic_string<char> ::イテレータ通信網=strCol。入れる((iter 2 'また')。;
費用<< *通信網<< 'NS';
費用<<strCol<< 'NS';

出力は次のとおりです。

'また'

土地のタブー。

basic_string入れる((size_type pos constチャート*NS)。

メイン文字列のインデックスposに引数文字列リテラルを挿入します。

文字列strCol=ストリング((「土地のタブ。」)。;
strCol=strCol。入れる((3 「oo」)。;
費用<<strCol<< 'NS';

出力:土地のタブー。

basic_string入れる((size_type pos constチャート*NSsize_type n)。

引数文字列リテラルの最初のn文字を、メイン文字列のインデックスposに挿入します。

文字列strCol=ストリング((「土地のタブ。」)。;
strCol=strCol。入れる((3 「oooo」 2)。;
費用<<strCol<< 'NS';

出力:土地のタブー。

交換

basic_string交換((size_type pos1size_type n1 constbasic_stringNS)。)。

インデックスpos1のメイン文字列オブジェクトのn1文字を、引数文字列オブジェクトに置き換えます。

文字列strCol1=ストリング(('愛してます')。;
文字列strCol2=ストリング((「あなたを憎み、」)。;
strCol1=strCol1。交換((2 4strCol2)。;
費用<<strCol1<< 'NS';

出力:私はあなたとあなたが嫌い​​です。例外をスローします–後で参照してください。

basic_string交換((size_type pos1size_type n1 constbasic_string
NSsize_type pos2size_type n2=npos)。

インデックスpos1のメイン文字列オブジェクトのn1文字を、インデックスpos2の引数文字列オブジェクトのn2文字に置き換えます。

文字列strCol1=ストリング(('愛してます')。;
文字列strCol2=ストリング((「私たちは彼と彼女を憎む」)。;
strCol1=strCol1。交換((2 4strCol2 3 12)。;
費用<<strCol1<< 'NS';

出力:私は彼とあなたが嫌い​​です。

basic_string交換((size_type pos1size_type n1 constチャート*NS
size_type n2)。

インデックスpos1のメイン文字列オブジェクトのn1文字を、リテラル文字列引数の最初のn2文字に置き換えます。

文字列strCol1=ストリング(('愛してます')。;
strCol1=strCol1。交換((2 4 「彼と彼女を憎む」 12)。;
費用<<strCol1<< 'NS';

出力:私は彼とあなたが嫌い​​です。

basic_string&replace(size_type pos、size_type n、const charT * s)

インデックスposのメイン文字列オブジェクトのn文字を、リテラル文字列引数に置き換えます。

文字列strCol1=ストリング(('愛してます')。;
strCol1=strCol1。交換((2 4 「彼を憎み、」)。;
費用<<strCol1<< 'NS';

出力:私は彼とあなたが嫌い​​です。

basic_string交換((size_type pos1size_type n1size_type n2チャートc)。

インデックスpos1のメイン文字列オブジェクトのn1文字を、引数と同じ文字のn2に置き換えます。

文字列strCol1=ストリング((「そこに悪いタブレット。」)。;
strCol1=strCol1。交換((9 3 2 'また')。;
費用<<strCol1<< 'NS';

出力:そこに悪いタブーがあります。

イテレータerase(const_iterator p)

イテレータが指す位置にある文字を削除します。次に、イテレータの位置を返します。この位置は、この文字の隣にあった文字(またはend())によって占められています。次のコードはこれを示しています。

文字列strCol=ストリング(('あいうえお')。;
basic_string<char> ::イテレータiter=strCol。始める(()。;
++iter; ++iter;
strCol。消去((iter)。;
費用<<strCol[0] << '' <<strCol[1] << '
'
<<strCol[2]<< 'NS';

出力:a b d

basic_string消去((size_type pos= 0size_type n=npos)。

インデックスposからn文字を削除します。

文字列strCol=ストリング(('あいうえお')。;
strCol。消去((1 2)。;
費用<<strCol[0] << '' <<strCol[1] << 'NS';

出力:a d

void push_back(charT c)

文字列の最後に1文字を追加するには:

文字列strCol=ストリング(('あいうえお')。;
strCol。push_back((「5」)。;
費用<<strCol<< 'NS';

出力:abcd5

void pop_back()

最後の文字を返さずに削除します。文字列のサイズが1つ小さくなります。

文字列strCol=ストリング(('abcde')。;
strCol。pop_back(()。;
費用<<strCol<< 'NS';

出力:abcd

void swap(basic_string&s)

2つの文字列オブジェクトのリテラルを交換できます。

文字列strCol1=ストリング((<援助='post-69618 -__ DdeLink__781_3724385525'>>>>'abcde')。;
文字列strCol2=ストリング((「1234567」)。;
strCol1。スワップ((strCol2)。;
費用<<strCol1<< 'NS';
費用<<strCol2<< 'NS';

出力は次のとおりです。

「1234567」
'abcde'

文字列操作

const charT * c_str()const noexcept

文字列の最初の要素へのポインタを返します。ポインタはインクリメントできます。

const文字列strCol=ストリング(('abcde')。;
const char*NS=strCol。c_str(()。;
費用<< *NS<< 'NS';
++NS;
費用<< *NS<< 'NS';

出力は次のとおりです。


NS

見出しの2番目の定数のため、プログラムは文字列のどの文字も変更できません。構築の前にconstがあります。

const charT * data()const noexcept

文字列の最初の要素へのポインタを返します。ポインタはインクリメントできます。

const文字列strCol=ストリング(('abcde')。;
const char*NS=strCol。データ(()。;
費用<< *NS<< 'NS';
++NS;
費用<< *NS<< 'NS';

出力は次のとおりです。


NS

見出しの2番目の定数のため、プログラムは文字列のどの文字も変更できません。構築の前にconstがあります。

basic_string substr(size_type pos = 0、size_type n = npos)const

インデックスposから始まるサブ文字列のn文字の文字列オブジェクトを返します。

const文字列strCol=ストリング(('abcdefghij')。;
const文字列retStr=strCol。substr((2 4)。;
費用<<retStr<< 'NS';

出力:cdef

find()メンバー関数

size_type find(const basic_string&str、size_type pos = 0)const noexcept

インデックスposから始まるサブ文字列オブジェクトを検索します。見つかった場合、メイン文字列のサブ文字列の先頭を返します。

文字列strCol=ストリング((「私たちは世界です!」)。;
文字列strCol1=ストリング(('NS')。;
int1つに=strCol。探す((strCol1 2)。;
費用<<1つに<< 'NS';

出力:

インデックス:7
見つからない場合は-1を返します。

size_type find(const charT * s、size_type pos = 0)const

インデックスposから始まるサブ文字列リテラルを検索します。見つかった場合、メイン文字列のサブ文字列の先頭を返します。

文字列strCol=ストリング((「私たちは世界です!」)。;
int1つに=strCol。探す(('それは' 0)。;
費用<<1つに<< 'NS';

pos = 0がデフォルトであるため、引数の0は省略できます。

出力:3

見つからない場合は-1を返します。

size_type find(const charT * s、size_type pos、size_type n)const

インデックスposから始まるサブ文字列リテラルの最初のn文字を検索します。見つかった場合、メイン文字列のサブ文字列の先頭を返します。

文字列strCol=ストリング((「最大の少年」)。;
int1つに=strCol。探す(('より大きい' 1 3)。;
費用<<1つに<< 'NS';

出力:4

見つからない場合は-1を返します。

size_type find(charT c、size_type pos = 0)const

インデックスposから始まる文字cを探します。見つかった場合、メイン文字列のサブ文字列の先頭を返します。見つからない場合は、-1を返します。

文字列strCol=ストリング((「私たちは世界です!」)。;
int1つに=strCol。探す(('と')。;
費用<<1つに<< 'NS';

出力:-1

次の逆find()メンバー関数が存在します。

size_type rfind((constbasic_stringNSsize_type pos=npos)。 constnoexcept;
size_type rfind((constチャート*NSsize_type pos=npos)。 const;
size_type rfind((constチャート*NSsize_type possize_type n)。 const;
size_type rfind((チャートcsize_type pos=npos)。 const;

比較メンバー関数

int compare(const basic_string&str)const noexcept

引数文字列オブジェクトをメイン文字列オブジェクトと比較します。メイン文字列が(辞書内の)引数の前にある場合、正の数を返します。メイン文字列の後に発生する場合は、負の数を返します。 2つの文字列が同じ場合、ゼロを返します。

文字列strCol1=ストリング(('群衆')。;
文字列strCol2=ストリング(('人')。;
int1つに=strCol1。比較((strCol2)。;
費用<<1つに<< 'NS';

出力:-13

int compare(const charT * s)const

上記と同じですが、引数は文字列リテラルです。

文字列strCol1=ストリング(('人')。;
int1つに=strCol1。比較(('人')。;
費用<<1つに<< 'NS';

出力:0

文字列演算子

これらの演算子は文字列オブジェクトに適用でき、必ずしも文字列リテラルである必要はありません。

+

2つの文字列オブジェクトを連結し、連結を返します。

文字列strCol1=ストリング((「踊る」)。;
文字列strCol2=ストリング((' ムーン')。;
文字列strCol=strCol1+strCol2;
費用<<strCol<< 'NS';

出力:月で踊る。

==

文字列オブジェクトが同じ場合、trueの場合は1を返します。そうでない場合は、falseの場合はゼロ。

文字列strCol1=ストリング((「踊る」)。;
文字列strCol2=ストリング((「月に」)。;
bool bl=strCol1==strCol2;
費用<<bl<< 'NS';

出力:0

!=

文字列オブジェクトが同じでない場合は1を返し、同じ場合は0を返します。

文字列strCol1=ストリング((「踊る」)。;
文字列strCol2=ストリング((「月に」)。;
bool bl=strCol1!=strCol2;
費用<<bl<< 'NS';

出力:1

<

辞書によると、左のオペランドが右のオペランドよりも小さい場合は1を返し、そうでない場合は0を返します。

文字列strCol1=ストリング((「踊る」)。;
文字列strCol2=ストリング((「月に」)。;
bool bl=strCol1<strCol2;
費用<<bl<< 'NS';

出力:0

C ++の通常の文字の場合、昇順で、数字は大文字の前にあり、大文字は小文字の前にあります。スペース文字はゼロの前にあり、それらすべてです。

C ++のメイン文字列の文字タイプ

char

char型は元のC ++型であり、通常は8ビットで文字を格納します。

char16_t

これにより、文字が16ビットで格納されます。

char32_t

これにより、文字が32ビットで格納されます。

wchar_t

char16_tとchar32_tはワイド文字です。 wchar_tは、独自仕様で実装定義のワイド文字です。

これらのタイプは特性と呼ばれます。ただし、C ++は、技術的にはそれらを特性の特殊化と呼んでいます。この記事では、char型に焦点を当てています。他のタイプへのアプローチは少し異なります-後で参照してください。

その他の文字列操作メンバー関数

他の文字列操作関数のシグネチャは次のとおりです。

size_type find_first_of((constbasic_stringNSsize_type pos= 0)。 constnoexcept;
size_type find_first_of((constチャート*NSsize_type possize_type n)。 const;
size_type find_first_of((constチャート*NSsize_type pos= 0)。 const;
size_type find_first_of((チャートcsize_type pos= 0)。 const;
size_type find_last_of((constbasic_stringNSsize_type pos=npos)。 constnoexcept;
size_type find_last_of((constチャート*NSsize_type possize_type n)。 const;
size_type find_last_of((constチャート*NSsize_type pos=npos)。 const;
size_type find_last_of((チャートcsize_type pos=npos)。 const;
size_type find_first_not_of((constbasic_stringNSsize_type pos= 0)。 constnoexcept;
size_type find_first_not_of((constチャート*NSsize_type possize_type n)。 const;
size_type find_first_not_of((constチャート*NSsize_type pos= 0)。 const;
size_type find_first_not_of((チャートcsize_type pos= 0)。 const;
size_type find_last_not_of((constbasic_stringNSsize_type pos=npos)。 constnoexcept;
size_type find_last_not_of((constチャート*NSsize_type possize_type n)。 const;
size_type find_last_not_of((constチャート*NSsize_type pos=npos)。 const;
size_type find_last_not_of((チャートcsize_type pos=npos)。 const;

結論

C ++には、文字列リテラルと文字列オブジェクトがあります。文字列オブジェクトには、文字列の配列と同様に、文字列のコレクションがあります。文字列コレクションと配列の違いは、文字列コレクションの長さが長くなったり短くなったりする可能性があることです。文字列オブジェクトは、文字列クラスからインスタンス化(構築)されます。文字列オブジェクトは、メンバー関数を持つデータ構造です。メンバー関数は、オブジェクト構築、要素アクセス、文字列容量、イテレータ引数と戻り型を持つ文字列メンバー関数、および文字列修飾子の見出しに分類できます。文字列の等式および関係演算子も存在します。