[C++学习笔记09]string

  1. string的定义原型
    typedef basic_string<char, char_traits<char>, allocator<char> >
        string; 
    typedef basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> >
        wstring;
    
    // 第二三个参数有默认值

  2. string部分构造方式
    // string 部分构造方式
    #include <iostream>
    #include <string>
    using namespace std;
    
    int main(void)
    {
        string s1;
        string s2("ABCDEFG");
        cout << s1 << endl;
        cout << s2 << endl;
    
        // 使用最初的形式定义
        basic_string<char> s3("xxxx");
        cout << s3 << endl;
    
        /*
            basic_string(
                const value_type *_Ptr, 
                size_type _Count
            );
        */
        string s4("DEFG", 2);
        cout << s4 << endl; // DE
        /*
            basic_string(
                const basic_string& _Right, 
                size_type _Roff,
                size_type _Count = npos
            );
        */
        string s5(s2, 2, 2);
        cout << s5 << endl; //CD
    
        /*
        basic_string(
           const_iterator _First,
           const_iterator _Last
        );
        */
        string::const_iterator first = s2.begin() + 1;
        string::const_iterator end = s2.begin() + 3; // [first, end)
        string s6(first, end);
        cout << s6 << endl; // BC
    
        return 0;
    }

     

  3. string常用成员函数
    // string 部分成员函数部分形式操作
    #include <iostream>
    #include <string>
    using namespace std;
    
    
    int main(void)
    {
        string s1("ABCDEC");
        cout << s1.size() << endl;
        cout << s1.length() << endl;
    
        cout << s1.empty() << endl;
        // 一样第二个参数是count,不是截至位置
        string s2 = s1.substr(1, /*4*/string::npos); // string::npos == 4294967295
        cout << s2 << endl;
    
        //find
        /*
            size_type find(
                value_type _Ch, 
                size_type _Off = 0
            ) const;
        */
        // 查找某个字符在string中第一次出现的位置(下标),没找到返回 4294967295 最大值
        cout << s1.find('C') << endl; // 2
        //size_type -> size_t ->unsigned int
        /*
            size_type find(
                const value_type* _Ptr,
                size_type _Off = 0
            ) const;
        */
        // 在string中查找字符串,找到返回第一次出现位置的下标,没找到返回 string::npos, 4294967295 最大值
        cout << s1.find("CD") << endl; // 2
        /*
        size_type find(
            const basic_string<CharType, Traits, Allocator>& _Str,
            size_type _Off = 0
            ) const;
        */
        // 在string中查找string
        cout << s1.find(s2) << endl;
    
        //rfind,反向查找,返回第一次查找到的下标
        cout << s1.rfind('C') << endl; // 5
    
        //replace
        /*
            basic_string<CharType, Traits, Allocator>& replace(
               size_type _Pos1, 
               size_type _Num1,
               const value_type* _Ptr
            );
        */
        // 第三个参数也能是string,这里不写了,只介绍这一个好了
        string s3 = s1;
        s3.replace(1, 2, "RRR");
        cout << s3 << endl; // ARRRDEC
    
        // compare 
        cout << s3.compare(s1) << endl; // 1, s3 > s1
    
        // insert
        /*
            basic_string<CharType, Traits, Allocator>& insert(
               size_type _P0, 
               const value_type* _Ptr
            );
        */
        s3.insert(2, "aaaaaaaaaaa");
        cout << s3 << endl; // ARaaaaaaaaaaaRRDEC
    
        // append
        /*
            basic_string<CharType, Traits, Allocator>& append(
                const value_type* _Ptr
            );
        */
        s3.append("OOOOOOOOOOOOOOOOO");
        cout << s3 << endl; // ARaaaaaaaaaaaRRDECOOOOOOOOOOOOOOOOO
    
        // swap
        /*
            void swap(
                basic_string<CharType, Traits, Allocator>& _Str
            );
        */
        s3.swap(s2);
        cout << s3 << endl;
        cout << s2 << endl;
    
        return 0;
    }

  4. string综合应用
      在字符集中查找存在的首尾字符,并截取。
    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
        string strinfo = " //*---------Hello World!--------------*//";
        string strset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
        /*
            size_type find_first_of(
                const basic_string<CharType, Traits, Allocator>& _Str,
                size_type _Off = 0
            ) const;
        */
        string::size_type first = strinfo.find_first_of(strset);
        if (first == string::npos)
            cout << "not found." << endl;
        string::size_type end = strinfo.find_last_of(strset);
        if (end == string::npos)
            cout << "not found." << endl;
        //cout << "string::npos" << string::npos << endl; // string::npos == 4294967295
        cout << strinfo.substr(first, end - first + 1) << endl;
    
        return 0;
    }

     

  5. string简单去除字符串左右空格
    // string 简单实现去除字符串左右空格
    #include <iostream>
    #include <string>
    using namespace std;
    
    class StringUtils {
    public:
        static void LTrim(string &s)
        {
            string drop = " \t";
            s.erase(0, s.find_first_not_of(drop));
        }
    
        static void RTrim(string &s)
        {
            string drop = " \t";
            s.erase(s.find_last_not_of(drop)+1);
        }
    
        static void Trim(string &s)
        {
            LTrim(s);
            RTrim(s);
        }
    };
    
    int main(void)
    {
        string s1 = "               ABCD                ";
        StringUtils::Trim(s1);
        cout << s1 << endl; // "ABCD"
        cout << s1.size() << endl; // 4
    
        return 0;
    }

     

posted @ 2015-05-23 11:54  IFPELSET  阅读(186)  评论(0编辑  收藏  举报