C++string文字列の修正と置換方法の詳細

9474 ワード

文字列の内容の変更には、変更と置換の2つが含まれます.このセクションでは、文字列の内容の変更と文字列の内容の置換について説明します.文字列の内容の変更は、複数の関数を使用して文字列の値を変更できます.たとえばassign(),operator=,erase(),交換(swap),挿入(insert)などである.また、append()関数で文字を追加することもできます.
各メンバー関数の使用方法について説明します.assign()関数は、assign()関数を使用して文字列に直接値を割り当てることができます.この関数は、文字列全体を新しい列に割り当てるか、文字列のサブ列を新しい列に割り当てることができます.basic_stringのプロトタイプは次のとおりです.
basic_string& assign (const E*s); //         
basic_string& assign (const E*s, size_type n);
basic_string& assign (const basic_string & str, size_type pos, size_type n);
// str         
basic_string& assign (const basic_string& str);    //      “  ”  
basic_string& assign (size_type n, E c) ; //   n       
basic_string& assign (const_iterator first, const_iterator last);    //       

以上のいくつかの方法は例1に現れた.下記のコードをご参考ください.
【例1】
#include 
#include 
using namespace std;
int main()
{
    string str1 ("123456");
    string str;
    str.assign (str1); //    
    cout << str << endl;
    str.assign (str1, 3, 3); //     
    cout << str << endl;
    str.assign (str1,2,str1.npos);//       2       
    cout << str << endl;
    str.assign (5,'X'); //   5  'X'  
    cout << str << endl;
    string::iterator itB;
    string::iterator itE;
    itB = str1.begin ();
    itE = str1.end();
    str.assign (itB, (--itE)); //   1       2    ,       str
    cout << str << endl;
    return 0;
}

operator=関数operator=の機能が付与されます.erase()関数erase()関数のプロトタイプは、次のとおりです.
    iterator erase (iterator first, iterator last);
    iterator erase (iterator it);
    basic_string& erase (size_type p0 = 0, size_type n = npos);

erase()関数の使用方法は、次のとおりです.
str.erase (str* begin(), str.end());
      str.erase (3);

swap()関数swap()関数のプロトタイプは、次のとおりです.
void swap (basic_string& str);

swap()関数の使用方法は、次のとおりです.
string str2 ("abcdefghijklmn");
str.swap (str2);

Insert()関数insert()関数のプロトタイプは、次のとおりです.
basic_string& insert (size_type p0 , const E * s); //   1         s   
basic_string& insert (size_type p0 , const E * s, size_type n); //   s    3      p0   
basic_string& insert (size_type p0, const basic_string& str);
basic_string& insert (size_type p0, const basic_string& str,size_type pos, size_type n); //   str    
basic_string& insert (size_type p0, size_type n, E c); //    p0       n     c
iterator insert (iterator it, E c); //  it        c
void insert (iterator it, const_iterator first, const_iterator last); //         
void insert (iterator it, size_type n, E c) ; //  it        n     c

Insert()関数の使用方法は、次のとおりです.
 string A("ello");
    string B ;
    B.insert(1,A);
    cout << B << endl;
    A = "ello";
    B = "H";
    B.insert (1,"yanchy ",3);
    cout<< B <

append関数append()関数のプロトタイプは次のとおりです.
 basic_string& append (const E * s); //             s
    basic_string& append (const E * s, size_type n);//              s    n    
    basic_string& append (const basic_string& str, size_type pos,size_type n);//              s     s [ pos,…,pos +n -1]
    basic_string& append (const basic_string& str);
    basic_string& append (size_type n, E c); //   n      
    basic_string& append (const_iterator first, const_iterator last); //       
    
    append()         :
    A = "ello";
    cout << A << endl;
    cout << B << endl;
    B.append(A);
    cout << B << endl;
    A = "ello";
    cout << A << endl;
    cout << B << endl;
    B.append("12345",2);
    cout << B << endl;
    A = "ello";
    cout << A << endl;
    cout << B << endl;
    B.append("12345",2,3);
    cout << B << endl;
    A = "ello";
    B = "H";
    cout << A << endl;
    cout << B << endl;
    B.append (10, 'a');
    cout << B << endl;
    A = "ello";
    B = 'H';
    cout << A << endl ;
    cout << B << endl;
    B.append(A.begin(), A, end());
    cout << B << endl;

これらの関数の使用例を完全な例で説明します.
#include 
#include 
using namespace std;
int main ()
{
    string str1 ("123456");
    string str2 ("abcdefghijklmn");
    string str;
    str.assign(str1);
    cout << str << endl;
    str.assign (str1 , 3, 3);
    cout << str << endl;
    str.assign (str1, 2, str1.npos);
    cout << str << endl;
    str.assign (5, 'X');
    cout << str << endl;
    string::iterator itB;
    string::iterator itE;
    itB = str1.begin ();
    itE = str1.end();
    str.assign (itB, (--itE));
    cout << str << endl;
    str = str1;
    cout << str << endl;
    str.erase(3);
    cout << str << endl;
    str.erase (str.begin (), str.end());
    cout << ":" << str << ":" << endl;
    str.swap(str2);
    cout << str << endl;
    string A ("ello");
    string B ("H");
    B.insert (1, A);
    cout << B << endl;
    A = "ello";
    B ='H';
    B.insert (1, "yanchy ", 3);
    cout << "  : " << B << endl;
    A = "ello";
    B = "H";
    B.insert(1,A,2,2);
    cout << "  :" << B << endl;
    A = "ello";
    B = "H";
    B.insert (1,5,'C');
    cout << "  :" << B << endl;
    A = "ello";
    B = "H";
    string::iterator it = B.begin () +1;
    const string::iterator itF = A.begin ();
    const string::iterator itG = A.end ();
    B.insert(it,itF,itG);
    cout<

プログラムの実行結果:
123456
456
3456
XXXXX
12345
123456
123
::
abcdefghijklmn
Hello
  : Hyan
  :Hlo
  :HCCCCC
  :Hello
A = ello, B = H
  :Hello
A = ello, B= H
  :H12
A = ello, B= H
  :H345
A = ello, B = H
  :Haaaaaaaaaa
A = ello, B = H
  :Hello

文字列の内容の置換1つの文字列に特定の位置が識別されている場合は、指定した位置文字の値を下付き操作で変更したり、サブ列を置換したりすることができます.この操作を完了するにはstringクラスのメンバー関数replace()を使用します.
replace()        :
basic_string& replace (size_type p0, size_type n0, const E * s); //      s    n    ,       P0      
basic_string& replace (size_type p0, size_type n0, const E *s, size_type n); //      s    n    ,       P0       1    
basic_string& replace (size_type p0, size_type n0, const basic_string& str); //      s    n    ,       P0      
basic_string& replace (size_type p0, size_type n0, const basic_string& str, size_type pos, size_type n); //    str     str [pos, pos + n-1]         ,    p0      ,     n0  
basic_string& replace (size_type p0, size_type n0, size_type n, E c); //   n     'c'         p0      n0    
basic_string& replace (iterator first0, iterator last0, const E * s);//       ,  1)     
basic_string& replace (iterator first0, iterator last0, const E * s, size_type n);//  2)   
basic_string& replace (iterator first0, iterator last0, const basic_string& str); //  3)   
basic_string& replace (iterator first0, iterator last0, size_type n, E c); //  5)   
basic_string& replace (iterator first0, iterator last0, const_iterator first, const_iterator last); //       

この関数の使用方法は、次のプログラムを参照してください.
#include 
#include 
using namespace std;
int main ()
{
    string var ("abcdefghijklmn");
    const string dest ("1234");
    string dest2 ("567891234");
    var.replace (3,3, dest);
    cout << "1: " << var << endl;
    var = "abcdefghijklmn";
    var.replace (3,1, dest.c_str(), 1, 3);
    cout << "2: " << var << endl;
    var ="abcdefghijklmn";
    var.replace (3, 1, 5, 'x');
    cout << "3: " << var << endl;
    string::iterator itA, itB;
    string::iterator itC, itD;
    itA = var.begin();
    itB = var.end();
    var = "abcdefghijklmn";
    var.replace (itA, itB, dest);
    cout << "4: " << var << endl;
    itA = var.begin ();
    itB = var.end();
    itC = dest2.begin () +1;
    itD = dest2.end ();
    var = "abodefghijklmn";
    var.replace (itA, itB, itC, itD);
    cout << "5: " << var << endl;
    var = "abcdefghijklmn";
    var.replace (3, 1, dest.c_str(), 4); //                 
    cout <

プログラム実行結果:
    1: abc1234ghijklmn
    2: abc234efghijklmn
    3: abcxxxxxefghijklmn
    4: 1234
    5: 67891234efghijklmn
    6: abc1234efghijklmn

このセクションでは、文字列の内容の変更と置換を行う関数とその使用方法について説明し、例題を示します.各関数には複数のプロトタイプがある可能性があるので、読者は自分の状況に応じて、その中の1つまたは2つを把握して、自分の使用の需要を満たすことを望んでいます.同時に,例題の実行効果と照らし合わせて,本章のソースコードを真剣に読み,本節の内容を徹底的に把握してほしい.