C++string中有关字符串内容修改和替换的函数浅析(3)

说明:
1)原型(8)与list容器有关,是C++11新标准,这里赞不详述。
2)以上原型中出现的返回值和参数有iterator和InputIterator与迭代器有关,这里也暂不详述,可以将其简单地理解为指针,begin()和end()的返回值与它们匹配。

示例:

#include<iostream>
#include<string>

using namespace std;

int main()
{
  /*
    *测试basic_string& insert (size_type pos, const basic_string& str);
  */
    string st1("123456789");
    //string st2("123456789");
    string str1("abc");
    st1.insert(3, str1);
    cout << st1 << endl;//123abc456789  注意是在pos所指位置前插入
    //st2.insert(10, str1);//超出范围
    //cout << st2 << endl;//不可以
    /*
    **测试basic_string& insert (size_type pos, const basic_string& str,size_type subpos, size_type sublen);
    */
    string st2("123456789");
    string st3("123456789");
    string str2("abcdefg");
    st2.insert(3, str2, 2, 3);
    cout << st2 << endl;//123cde456789
    st3.insert(3, str2, 4, 9);//超出范围
    cout << st3 << endl;//123efg456789  可见如果超出字符串的长度,则一直到字符串的最后,不补空格
    /*
    **测试basic_string& insert (size_type pos, const charT* s);
    */
    string st4("123456789");
    string st5("123456789");
    char* str3 = "abc";
    st4.insert(3, str3);
    cout << st4 << endl;//123abc456789
    st5.insert(3, "abc");
    cout << st5 << endl;//123abc456789
    /*
    **测试basic_string& insert (size_type pos, const charT* s, size_type n);
    */
    string st6("123456789");
    string st7("123456789");
    st6.insert(3, "abcdefg", 3);//n可以为0,为0时什么也不加 当n为负值时会出现运行时错误
    cout << st6 << endl;//123abc456789
    st7.insert(3, "abcdefg", 20);//超出范围
    cout << st7 << endl;//123abcdefg i n v a l i 456789  调大n值(如500)进行测试,发现中间多出来的是报错的语句和乱码,且每次运行的输出可能不一样
                        //CodeBlocks12.11上中间直接就是乱码
    /*
    **测试basic_string& insert (size_type pos,  size_type n, charT c);  和  iterator insert (const_iterator p, size_type n, charT c);
    */
    string st8("123456789");
    string st9("123456789");
    st8.insert(3, 2, 'a');
    cout << st8 << endl;//123aa456789
    st9.insert(st9.begin() + 3, 2, 'a');
    cout << st9 << endl;//123aa456789
    /*
    **测试iterator insert (const_iterator p, charT c);
    */
    string ss1("123456789");
    ss1.insert(ss1.begin()+3, 'a');//由原型知,这里不能将ss1.begin()+3改为3
    cout << ss1 << endl;//123a456789
    /*
    **测试template <class InputIterator>
    **    iterator insert (iterator p, InputIterator first, InputIterator last);
    */
    string ss2("123456789");
    string str4("abcdefg");
    ss2.insert(ss2.begin() + 3, str4.begin(), str4.begin()+3);//超出范围会出现运行时错误
    cout << ss2 << endl;//123abc456789
    return 0;
}

6.append()

原型:

//string (1)
basic_string& append (const basic_string& str);
//substring (2)
basic_string& append (const basic_string& str, size_type subpos, size_type sublen);
//c-string (3)
basic_string& append (const charT* s);
//buffer (4)
basic_string& append (const charT* s, size_type n);
//fill (5)
basic_string& append (size_type n, charT c);
//range (6)
template <class InputIterator>
basic_string& append (InputIterator first, InputIterator last);
//initializer list(7)
basic_string& append (initializer_list<charT> il);

(7)不详述。
示例:

#include<iostream>
#include<string>

using namespace std;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/128aa60f95789796d51326bdbb27a34b.html