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_typelength );//拷贝一个字符串的子串
string(size_type length, const char& ch); //用单个字符构造
string(const char* str); //用C风格字符串构造
string(const char* str, size_type length );//截取C风格字符窜的前length个字符构造
2. 为了方便使用string重载了以下操作符:
//比较全部是以字典序为基础的
booloperator==(const string& c1, conststring& c2);
booloperator!=(const string& c1, conststring& c2);
booloperator<(const string& c1, conststring& c2);
booloperator>(const string& c1, conststring& c2);
booloperator<=(const string& c1, conststring& c2);
booloperator>=(const string& c1, conststring& c2);
//+ 可与 string,C风格字符串,字符 相加
stringoperator+(const string& s1, conststring& s2 );
stringoperator+(const char* s, const string& s2 );
stringoperator+( char c, const string& s2 );
stringoperator+( const string& s1, const char* s );
stringoperator+( const string& s1, char c );
basic_string& operator+=(constbasic_string& append);
basic_string& operator+=(const char* append);
basic_string& operator+=(constchar 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 返回子串
stringstring::substr(size_type index, size_type length = npos);
push_back 追加一个字符,不能是字符串.
voidpush_back( char c );
clear 清空
voidclear();
c_str 返回C风格字符串常量.注意是常量,不能修改,不用delete.
constchar* c_str();
size 返回长度
size_typesize() const;
length 返回字符串的长度.同size()
size_typelength() const;
empty 是否为空
boolempty() const;
一系列的查找函数,成对的.
find 查找字符串
size_typefind( const string& str, size_type index = 0 )const;
size_typefind( const char* str, size_type index = 0 ) const;
size_typefind( const char* str, size_type index, size_type length )const;
size_typefind( char ch, size_type index = 0 ) const;
rfind 反向查找字符串
find_first_of 查找字符(集)
size_typefind_first_of( const string &str, size_type index =0 );
size_typefind_first_of( const char* str, size_type index = 0 );
size_typefind_first_of( const char* str, size_type index, size_type num);
size_typefind_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填充.
voidresize( size_type size, const TYPE& val = TYPE());
compare 我平时很少用的一个函数
intcompare( const string& str );
intcompare( const char* str );
intcompare( size_type index, size_type length, conststring& str );
intcompare( size_type index, size_type length, conststring& str, size_type index2, size_type length2);
intcompare( 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, constchar& ch );
at 几乎用不到,功能和[]一样,但要注意:它会检查越界,和抛异常.肯定要比[]效率低很多.
char& at( size_type loc );
constchar& at( size_type loc ) const;
begin 返回一个指向首元素的迭代器.
iteratorbegin();
const_iterator begin() const;
end 返回结束迭代器
iteratorend();
const_iterator end() const;
capacity返回在重新分配空间前还能存储几个元素,一般用不到
size_typecapacity() const;
copy 把内容拷到一个C风格字符串里,但并不用' '结尾,且可能越界,返回拷贝的字符数.
size_typecopy( char* str, size_type num, size_type index = 0 );
data 返回一个数据区指针.内容是常量
constchar *data();
erase 擦除元素
iteratorerase( iterator loc );
iteratorerase( iterator start, iterator end );
string& erase( size_type index = 0, size_type num =npos );
insert 插入
iteratorinsert( iterator i, const char& ch );
string& insert( size_type index, conststring& str );
string& insert( size_type index, const char* str);
string& insert( size_type index1, conststring& 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 );
voidinsert( iterator i, size_type num, const char& ch);
voidinsert( iterator i, input_iterator start, input_iterator end );
max_size 返回字符串能达到的最大长度,感觉没有什么意义
size_typemax_size() const;
reserve 紧缩字符串存储,即让capacity为0.从来没用过.
voidreserve( size_type size );
swap 交换内容
voidswap( container& from );