字符串处理小结

来源:互联网 发布:贵州中小企业数据统计 编辑:程序博客网 时间:2024/05/17 03:54

C++字符串总结

string类在头文件<string>中定义,并不属于STL,它是与IO流,异常机制,STL并列的现代C++基本元素.

对它的用法做个总结.

 

1. string有多种构造方式,按使用频率排列为:

 

    string();                               //构造空字符串

    string( const string& s );              //拷贝构造

    string( input_iterator start, input_iterator end );    //迭代器构造

    string( const string& str, size_type index, size_type length );//拷贝一个字符串的子串

    string( size_type length, const char& ch );   //用单个字符构造

    string( const char* str );                                   //用C风格字符串构造

    string( const char* str, size_type length );//截取C风格字符窜的前length个字符构造

 

2. 为了方便使用string重载了以下操作符:

 

    //比较 全部是以字典序为基础的

    bool operator==(const string& c1, const string& c2);

    bool operator!=(const string& c1, const string& c2);

    bool operator<(const string& c1, const string& c2);

    bool operator>(const string& c1, const string& c2);

    bool operator<=(const string& c1, const string& c2);

    bool operator>=(const string& c1, const string& c2);

 

    //+   可与 string,C风格字符串,字符 相加

    string operator+(const string& s1, const string& s2 );

    string operator+(const char* s, const string& s2 );

    string operator+( char c, const string& s2 );

    string operator+( const string& s1, const char* s );

    string operator+( const string& s1, char c );

    basic_string& operator+=(const basic_string& append);

    basic_string& operator+=(const char* append);

    basic_string& operator+=(const char  append);

 

    //输入输出

    ostream& operator<<( ostream& os, const string& s );

    istream& operator>>( istream& is, string& s );

    string& operator=( const string& s );

 

    //赋值

    string& operator=( const char* s );

    string& operator=( char ch );       //不常用的赋值

    char& operator[]( size_type index );

 

    其中最后一个可能是使用的最频繁的,它让程序员可以像访问字符数组一样访问字符串的元素.

 

3. 常用操作

 

substr 返回子串

    string string::substr(size_type index, size_type length = npos);

 

 

push_back 追加一个字符,不能是字符串.

    void push_back( char c );

clear       清空

    void clear();

 

c_str 返回C风格字符串常量.注意是常量,不能修改,不用delete.

    const char* c_str();

 

size 返回长度

    size_type size() const;

 

length 返回字符串的长度.同size()

    size_type length() const;

 

empty 是否为空

    bool empty() const;

 

 

一系列的查找函数,成对的.

find               查找字符串

    size_type find( const string& str, size_type index = 0 ) const;

    size_type find( const char* str, size_type index = 0 ) const;

    size_type find( const char* str, size_type index, size_type length ) const;

    size_type find( char ch, size_type index = 0 ) const;

rfind                     反向查找字符串

 

 

find_first_of         查找字符(集)

    size_type find_first_of( const string &str, size_type index = 0 );

    size_type find_first_of( const char* str, size_type index = 0 );

    size_type find_first_of( const char* str, size_type index, size_type num );

    size_type find_first_of( char ch, size_type index = 0 );

find_last_of          反向

 

find_first_not_of  查找不在字符集中的字符

find_last_not_of   反向

 

 

replace   替换,很有用的一个函数,string的替换功能还是非常强大的.

    string& replace( size_type index, size_type num, const string& str );

    string& replace( size_type index1, size_type num1, const string& str, size_type index2, size_type num2 );

    string& replace( size_type index, size_type num, const char* str );

    string& replace( size_type index, size_type num1, const char* str, size_type num2 );

    string& replace( size_type index, size_type num1, size_type num2, char ch);

 

    string& replace( iterator start, iterator end, const string& str );

    string& replace( iterator start, iterator end, const char* str );

    string& replace( iterator start, iterator end, const char* str, size_type num );

    string& replace( iterator start, iterator end, size_type num, char ch );

 

 

resize     改变字符串的大小,多的丢弃,少的用val填充.

    void resize( size_type size, const TYPE& val = TYPE() );

 

 

compare 我平时很少用的一个函数

    int compare( const string& str );

    int compare( const char* str );

    int compare( size_type index, size_type length, const string& str );

    int compare( size_type index, size_type length, const string& str, size_type index2, size_type length2 );

    int compare( size_type index, size_type length, const char* str, size_type length2 );

    功能很强,返回结果如下:

       Return Value                Case

       less than zero       this < str

       zero                     this == str

       greater than zero  this > str

 

rbegin    返回一个反向迭代器,它是指向字符串结尾的

rend              指向开头

 

另外还有个常用的函数

getline    它并不是成员函数,但却是为string而生.用于整行的读入数据

    istream& std::getline( istream& is, string& s, char delimiter = '\n' );

 

 

4. 不常用的操作.

append   多数情况下可用运算法+ 取代

    string& append( const string& str );

    string& append( const char* str );

    string& append( const string& str, size_type index, size_type len );

    string& append( const char* str, size_type num );

    string& append( size_type num, char ch );

    string& append( input_iterator start, input_iterator end );

 

assign     和构造函数异常相似,其实就是抛弃了原来的内容,重新构造.

    string& assign( input_iterator start, input_iterator end );

    string& assign( const string& str );

    string& assign( const char* str );

    string& assign( const char* str, size_type num );

    string& assign( const string& str, size_type index, size_type len );

    string& assign( size_type num, const char& ch );

 

at    几乎用不到,功能和[]一样,但要注意:它会检查越界,和抛异常.肯定要比[]效率低很多.

    char& at( size_type loc );

    const char& at( size_type loc ) const;

 

begin      返回一个指向首元素的迭代器.

    iterator begin();

    const_iterator begin() const;

end  返回结束迭代器

    iterator end();

    const_iterator end() const;

 

capacity返回在重新分配空间前还能存储几个元素,一般用不到

    size_type capacity() const;

 

copy       把内容拷到一个C风格字符串里,但并不用'\0'结尾,且可能越界,返回拷贝的字符数.

    size_type copy( char* str, size_type num, size_type index = 0 );

 

data 返回一个数据区指针.内容是常量

    const char *data();

 

 

erase      擦除元素

    iterator erase( iterator loc );

    iterator erase( iterator start, iterator end );

    string& erase( size_type index = 0, size_type num = npos );

 

insert     插入

    iterator insert( iterator i, const char& ch );

    string& insert( size_type index, const string& str );

    string& insert( size_type index, const char* str );

    string& insert( size_type index1, const string& str, size_type index2, size_type num );

    string& insert( size_type index, const char* str, size_type num );

    string& insert( size_type index, size_type num, char ch );

    void insert( iterator i, size_type num, const char& ch );

    void insert( iterator i, input_iterator start, input_iterator end );

 

max_size 返回字符串能达到的最大长度,感觉没有什么意义

    size_type max_size() const;

 

reserve   紧缩字符串存储,即让capacity为0.从来没用过.

    void reserve( size_type size );

 

swap       交换内容

    void swap( container& from );

原创粉丝点击