追加の文字列操作

シーケンシャルコンテナとの協力に加えて、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終了。

文字列を変更する他の方法

イテレータバージョンを受信することに加えてinserterase外部、stringそれはまた、被験者の受け入れバージョンで提供されます。添字はに挿入する前に、与えられた値の開始位置または削除位置を示しています。

s.insert(s.size(),5,'!');   //在s的末尾插入5个感叹号
s.erase(s.size()-5,5);      //从s删除最后5个字符

標準ライブラリstringのタイプはまた、文字のCスタイルの配列受け入れるために設けられているinsertassignバージョンを。例えば、文字の配列はnull文字になりますinsertまたはassign1に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つの追加のメンバ関数を定義していますappendreplaceこれらの2つの機能は、変更することができstring、コンテンツを。

append操作は、string挿入端部の速記形式:

string s("C++ Primer"), s2 = s;
s.insert(s.size(), " 4th Ed.");
s2.append(" 4th Ed.");

replace操作が呼び出されるeraseinsert、フォームの:

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::nposstaticメンバーを。

標準ライブラリ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セットを提供compareC関数こと関数strcmpSによれば、機能が類似していることは、あまり指定した文字列よりも、より大きい、と等しいs.compare戻り0、または負の整数。

数値変換

データおよび標準ライブラリstring間の変換。

あなたがいる場合string、数値に変換できない、これらの機能は、スローinvalid_argument例外を。

変換された値は、任意の型で表現できない場合、それはスローout_of_range例外を。

おすすめ

転載: www.cnblogs.com/xiaojianliu/p/12497211.html