順序容器--字符串操作


  • 對於字符串string的額外操作

    s.substr(pos,n) 返回一個string包含從pos開始的n個字符串的拷貝。pos默認爲0. n的默認值爲s.size()-pos,就是拷貝從pos開始的所有字符
    const char *cp = "Hello world!!!!";
    char noNuLL[] = { 'H', 'i' };
    string s1(cp);
    string s2(noNuLL, 2);
    string s3(noNuLL);//錯誤字符串需要以/0爲結束符
    string s4(cp + 6, 5);
    string s5(s1, 6, 5);
    string p("Helo World!!!");
    string p2 = p.substr(0, 5);
    string p3 = p.substr(5);
    string p4 = p.substr(6, 11);
    cout << p << endl;
    cout << p2 << endl;
    cout << p3 << endl;
    cout << p4 << endl;
    
    字符串操作 含義
    s.insert(pos,args) pos可以是下標或者迭代器,或者說所有線性存儲容器都支持下標設置
    s.erase(pos,len) 刪除pos位置上長度爲len個字符
    s.append(args) 在s末尾添加args然後返回一個s的引用
    s.assign(args) 這是一個替換函數。用args替換s中的字符串
    s.replace(range,args) 刪除s中範圍range內的字符並且用args替換
#include<iostream>
#include<string>
#include <vector>
using namespace std;


void replace_string(string&s, const string &oldVal, const string &newVal)
{
    auto l = oldVal.size();
    if (!l)
        return;//表示要查找的字符串爲空
    auto iter = s.begin();
    while (iter <= s.end() - 1)
    {
        auto iter1 = iter;
        auto iter2 = oldVal.begin();
        while (iter2 != oldVal.end() && *iter1 == *iter2)
        {
            iter1++;
            iter2++;
        }
        if (iter2 == oldVal.end())
        {
            iter = s.erase(iter, iter1);//由後至前逐個插入
            if (newVal.size())
            {
                iter2 = newVal.end();
                do
                {
                    iter2--;
                    iter2 = s.insert(iter, *iter2);
                } while (iter2 > newVal.begin());
            }
            iter += newVal.size();
        }
        else
            iter++;
    }


}




int main(int argc, char **argv)
{
    //////////////////////////////////////////////////////////////////////////
    //string操作
    const char *cp = "Hello world!!!!";
    char noNuLL[] = { 'H', 'i' };
    string s1(cp);
    string s2(noNuLL, 2);
    string s3(noNuLL);//錯誤字符串需要以/0爲結束符
    string s4(cp + 6, 5);
    string s5(s1, 6, 5);
    string p("Helo World!!!");
    string p2 = p.substr(0, 5);
    string p3 = p.substr(5);
    string p4 = p.substr(6, 11);
    cout << p << endl;
    cout << p2 << endl;
    cout << p3 << endl;
    cout << p4 << endl;
    //string p5 = p.substr(16);//字符串數組越界,拋出異常
    //////////////////////////////////////////////////////////////////////////
    //9.41
    vector<char>vc{ 'g', 'f', 's', 'b', 'a' };
    string s(vc.data(), vc.size());
    cout << s<<endl;
    void input_string(string&s);



    system("pause");
}
//////////////////////////////////////////////////////////////////////////
//高效的處理動態增長的string
//在聲明的過程中就直接定義了嗎?應該是的,雖然定義與實現要分離但是這樣會浪費大量的新建文件的時間,這時候小型文本編輯器就顯得很重要了,而不會選擇如此臃腫的vs2013
    void input_string(string&s)
    {
        s.reserve(100);
        char c;
        while (cin >> c)
            s.push_back(c);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章