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

其中,(7)与list容器有关,而(8)与右值引用和移动语义有关,这里我们暂不详述。
对于(8)中的noexcept关键字,它声明了函数不会抛出异常(当然函数不是真的就永远都不会抛出异常,比如该函数A(声明为noexcept)中调用了另一个函数B,而函数B中有抛出异常语句,那么,当我们调用函数A是,就可能抛出异常),由于noexcept不是本文的重点,这里我们不详述,有兴趣的读者可以自行查阅资料了解学习相关内容。

2.swap()

原型:void swap (basic_string& str);
只有这一个,要交换就交换整个字符串,这里没有针对子串的操作。
不举例。

3.erase()

原型:

//sequence (1)
basic_string& erase (size_type pos = 0, size_type len = npos);
//character (2)
    iterator erase (iterator p);
//range (3)
    iterator erase (iterator first, iterator last);

说明:
注意到basic_string& erase (size_type pos = 0, size_type len = npos);给出了默认参数,这样,我们在使用该函数时,就可以省略第2个参数,效果是删除从第1个参数所指位置(包括该位置)起的所有字符(正如下边示例中有关str3的操作和输出)。原因是len=npos,而npos一定大于string对象的最大长度。

示例:

#include<iostream>
#include<string>

using namespace std;

int main()
{
    string str1("123456789");
    string str2("123456789");
    string str3("123456789");
    string str4("123456789");
    string str5("123456789");
    string str6("123456789");
    string str7("123456789");
    string str8("123456789");
    str1.erase(2, 3);
    cout << str1 << endl;//126789
    str2.erase(2, 10); cout << endl;//空行
    str3.erase(7);//注意这里的参数值不能超过str3.length(),否则会出现运行时错误等于是输出空行,相当于删除'\0'及其后面的(当然后面什么也没有,
                  //因为'\0'已经是最后一个)
    cout << str3 << endl;//1234567  当省略第2个参数时,删除第1个参数所指位置起(即包括该位置)的所有字符
    //str4.erase(10, 5);//这么做不行
    //cout << str4 << endl;
    str4.erase(str4.begin());
    cout << str4 << endl;//23456789
    str5.erase(str5.begin() + 2);
    cout << str5<< endl;//12456789
    //str6.erase(str6.begin() + 10);//这么做不行
    //cout << str6 << endl;
    str6.erase(str6.end() - 2);
    cout << str6 << endl;//12345679
    //str7.erase(str7.end() - 10);//这么做不行
    //cout << str7 << endl;
    str7.erase(str7.begin()+2,str7.end()-2);
    str7.erase(str7.begin() + 2, str7.end() - 2);
    cout << str7 << endl;//1289  删除从str7.begin()+2(包括str7.begin()+2)到str7.end() - 2(包括str7.end() - 2)的所有字符
    //str8.erase(str8.begin() + 7, str8.end() - 5);//这么做不行
    //cout << str8 << endl;
    return 0;
}

4.clear()

原型:

void clear() noexcept;

作用:
删除字符串的所有内容。

示例:

#include<iostream>
#include<string>

using namespace std;

int main()
{
    string str("123456789");
    str.clear();
    cout << str << endl;//空行
    cout << str.length() << endl;//0
    return 0;
}

5.insert()

原型:

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

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

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