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 );