シーケンシャルコンテナとの協力に加えて、string
種類も追加操作の数を提供しています。
建設文字列の他の方法
char noNull[] = { 'H','i' };
string s1(cp); //拷贝cp中的值,直到遇到空字符
string s2(noNull,2); //从noNull拷贝两个字符
string s3(noNull); //未定义,noNull不是以空字符结束
string s4(cp+6,5); //从cp[6]开始,拷贝5个字符
string s5(s1,6,5); //从s1[6]开始,拷贝5个字符
string s6(s1,6); //从s1[6]开始,直到s1末尾
string s7(s1,6,20); //从s1[6]开始,直到s1末尾
string s8(s1, 16); //抛出一个out_of_range异常
ときにconst char*
作成されstring
、配列は、ポイントを指している必要があり、NULLで終了され、ヌル文字のコピー操作を停止します。コンストラクタのみ1カウントに渡された場合でも、それは配列がnullで終了していません。未定義の状況の二種類:
- 計算値を渡していないと、アレイは、NULLで終了ではないでください。
- 計算値は、与えられたが、カウントは、配列のサイズよりも大きいです。
string
コピーは、任意の開始位置を設けることができ、カウント値未満または所定の開始位置に等しくなければならないstring
所与よりも大きい場合、サイズstring
スロー、サイズout_of_range
例外を。あなたが特定の場所からのカウント値を渡す場合そんなに文字のコピーを開始します。コピーし、標準ライブラリのコピーまでを必要とどのように多くの文字どんなにstring
終了。
SUBSTR
substr
リターンstring
元で、string
一部または非コピーのすべては、に渡すことができるsubstr
オプションの開始位置とカウント値。
string s("Hello World");
string s2 = s.substr(0, 5);
string s3 = s.substr(6);
string s4 = s.substr(6, 11);
string s5 = s.substr(12); //抛出 out_of_range 异常
上の位置を開始する場合はstring
サイズ、substr
関数がスローされますout_of_range
例外を。
カウントがより大きいプラスからの位置を開始した場合string
得サイズ、substr
カウント値を調整し、のみにコピーstring
終了。
文字列を変更する他の方法
イテレータバージョンを受信することに加えてinsert
、erase
外部、string
それはまた、被験者の受け入れバージョンで提供されます。添字はに挿入する前に、与えられた値の開始位置または削除位置を示しています。
s.insert(s.size(),5,'!'); //在s的末尾插入5个感叹号
s.erase(s.size()-5,5); //从s删除最后5个字符
標準ライブラリstring
のタイプはまた、文字のCスタイルの配列受け入れるために設けられているinsert
とassign
バージョンを。例えば、文字の配列はnull文字になりますinsert
またはassign
1にstring
。
const char* cp = "Stately,plump Buck";
string s;
s.assign(cp,7);
s.insert(s.size(),cp+7);
必要assign
より小さいか等しくなるように割り当てられた文字の数cp
アレイの文字サイズは、(末尾のヌル文字を除く)を指摘しました。
insert
指定された文字は、に指定された位置の前に挿入されています。
また、他のから指定することができるstring
電流に文字または部分string
または現在付与string
。
string s = "some string";
string s2 = "some other string ";
s.insert(0, s2); //在s中位置0之前插入s2的拷贝
//在s[0]之前插入s2中s2[0]开始的s2.size()个字符
s.insert(0,s2,0,s2.size());
機能を追加し、交換してください
string
クラスは、2つの追加のメンバ関数を定義していますappend
とreplace
。これらの2つの機能は、変更することができstring
、コンテンツを。
append
操作は、string
挿入端部の速記形式:
string s("C++ Primer"), s2 = s;
s.insert(s.size(), " 4th Ed.");
s2.append(" 4th Ed.");
replace
操作が呼び出されるerase
とinsert
、フォームの:
string s("C++ Primer 4th Ed."), s2 = s;
s.erase(11, 3);
s.insert(11, "5th");
s2.replace(11, 3, "5th");
オーバーロードされた関数の様々な文字列を変更します
assign
必ず交換してくださいstring
すべてのコンテンツを。append
常に新しい文字を追加しstring
終了。replace
次の2つの方法で利用可能な要素の指定した範囲を削除することができます。- 範囲は、位置と長さで指定することができます。
- これは、イテレータの範囲で指定することができます。
insert
指定したインデックスまたは新規要素がイテレータに挿入される前に、添字またはイテレータ:それは2つの方法が挿入点を指定することができます。
文字列の検索操作
string
クラスには、それぞれ4つのオーバーロードがあり、6つの別の検索要素の機能を提供します。各検索操作が返すstring::size_type
リターンと呼ばれる検索が失敗した場合、発生したインデックスの試合の位置を表す値、string::npos
のstatic
メンバーを。
標準ライブラリnpos
として定義されているconst string::size_type
タイプ、値を初期化します-1
。この手段は、初期値は、npos
任意に等しいstring
最大サイズ。検索機能を返すのでstring::size_type
値を、タイプがあるunsigned
タイプ、したがって、とint
や記号のクラスの他のタイプでは、これらの関数は値は良いアイデアではありません返し保持しています。
find
検索を完了するための最も簡単な機能。これは、見つかった場合は、最初に一致した位置のインデックスがそうでない場合は、返され、指定された文字列パラメータを探しますnpos
。
string name("AnnaBelle");
auto pos1 = name.find("Anna"); //0
与えられた文字列内の場所を見つけるには、任意の1文字に一致します。
string numbers("0123456789"), name("r2d2");
auto pos = name.find_first_of(numbers); //1
最初のパラメータのための検索は、文字の量ではありません。
string numbers("0123456789");
string dept("03714p3");
auto pos = dept.find_first_not_of(numbers); //5
検索を開始する場所を指定します
操作は、このオプションのパラメータは、検索を開始し、そこから場所を指定し、代替開始位置を見つけるために渡すことができ、デフォルトでは、この場所は0に設定されています。
一般的なプログラミングモデルが表示された文字列のすべてを検索する文字列のループではオプションのパラメータです。
string numbers("0123456789"), name("r2d2");
string::size_type pos = 0;
while((pos = name.find_first_of(numbers,pos))!= string::npos)
{
cout << "found number at index:" << pos
<< " element is " << name[pos] << endl;
++pos;
}
最初から第二段階、pos
文字を検索するには、開始点、およびこの文字は数字であるため、find_first_of
復帰を繰り返すことになりますpos
。
リバース検索
また、ライブラリには、右から左に検索操作を提供します。
rfind
メンバ関数は、子は、文字列の右端の位置を表示されていることを、最後のマッチを検索します。find_last_of
検索と特定のstring
一致する文字の最後の文字のいずれかで。find_last_not_of
最後に、与えられた検索では表示されませんstring
文字。
string river("Mississippi");
auto first_pos = river.find("is"); //1
auto last_pos = river.rfind("is"); //4
比較関数
string
セットを提供compare
C関数こと関数strcmp
Sによれば、機能が類似していることは、あまり指定した文字列よりも、より大きい、と等しいs.compare
戻り0、または負の整数。
数値変換
データおよび標準ライブラリstring
間の変換。
あなたがいる場合string
、数値に変換できない、これらの機能は、スローinvalid_argument
例外を。
変換された値は、任意の型で表現できない場合、それはスローout_of_range
例外を。