std::string
string是C++标准库中的字符串类,其对字符串的相关使用进行了封装。实现了自动增长和越界保护。并且对常用的操作符进行了重载,使其更易于使用。
参考:
一、构造函数
string();
string( size_type length, char ch );
string( const char *str );
string( const char *str, size_type length );
string( string &str, size_type index, size_type length );
string( input_iterator start, input_iterator end );
二、操作符
== > < >= <= != + += []
string对上述操作符进行了重载。
三、添加
添加文本可以直接使用重载的+号,但提供的append函数实现了更过功能:
basic_string &append( const basic_string &str );
basic_string &append( const char *str );
basic_string &append( const basic_string &str, size_type index, size_type len );
basic_string &append( const char *str, size_type num );
basic_string &append( size_type num, char ch );
basic_string &append( input_iterator start, input_iterator end );
四、赋值和拷贝
1.赋值
赋值可以使用重载的=号,同样,assign函数提供了更多功能:
basic_string &assign( const basic_string &str );
basic_string &assign( const char *str );
basic_string &assign( const char *str, size_type num );
basic_string &assign( const basic_string &str, size_type index, size_type len );
basic_string &assign( size_type num, char ch );
2. 拷贝
size_type copy( char *str, size_type num, size_type index );
copy函数拷贝自己的num个字符到str中(从index开始复制)。返回值为拷贝的字符数。
五、插入
iterator insert( iterator i, const char &ch );
basic_string &insert( size_type index, const basic_string &str );
basic_string &insert( size_type index, const char *str );
basic_string &insert( size_type index1, const basic_string &str, size_type index2, size_type num );
basic_string &insert( size_type index, const char *str, size_type num );
basic_string &insert( size_type index, size_type num, char ch );
void insert( iterator i, size_type num, const char &ch );
void insert( iterator i, iterator start, iterator end );
在迭代器i表示的位置前面插入一个字符ch,
在字符串的位置index插入字符串str,
在字符串的位置index插入字符串str的子串(从index2开始,长num个字符),
在字符串的位置index插入字符串str的num个字符,
在字符串的位置index插入num个字符ch的拷贝,
在迭代器i表示的位置前面插入num个字符ch的拷贝,
在迭代器i表示的位置前面插入一段字符,从start开始,以end结束.
六、切片
basic_string substr( size_type index, size_type num = npos );
substr()返回本字符串的一个子串,从index开始,长num个字符。
七、替代
basic_string &replace( size_type index, size_type num, const basic_string &str );
basic_string &replace( size_type index1, size_type num1, const basic_string &str, size_type index2,size_type num2 );
basic_string &replace( size_type index, size_type num, const char *str );
basic_string &replace( size_type index, size_type num1, const char *str, size_type num2 );
basic_string &replace( size_type index, size_type num1, size_type num2, char ch );
basic_string &replace( iterator start, iterator end, const basic_string &str );
basic_string &replace( iterator start, iterator end, const char *str );
basic_string &replace( iterator start, iterator end, const char *str, size_type num );
basic_string &replace( iterator start, iterator end, size_type num, char ch );
用str中的num个字符替换本字符串中的字符,从index开始
用str中的num2个字符(从index2开始)替换本字符串中的字符,从index1开始,最多num1个字符
用str中的num个字符(从index开始)替换本字符串中的字符
用str中的num2个字符(从index2开始)替换本字符串中的字符,从index1开始,num1个字符
用num2个ch字符替换本字符串中的字符,从index开始
用str中的字符替换本字符串中的字符,迭代器start和end指示范围
用str中的num个字符替换本字符串中的内容,迭代器start和end指示范围,
用num个ch字符替换本字符串中的内容,迭代器start和end指示范围.
八、索引
使用重载的
[]符号,如果使用这个进行索引,则string不进行越界检查。使用
at方法:
reference at( size_type index );
at方法提供了越界检查,当索引越界时,将会引发out_of_range异常。
九、比较
比较可以使用重载的<、>、==、!=,但是compare函数提供了更多的功能:
int compare( const basic_string &str );
int compare( const char *str );
int compare( size_type index, size_type length, const basic_string &str );
int compare( size_type index, size_type length, const basic_string &str, size_type index2,
size_type length2 );
int compare( size_type index, size_type length, const char *str, size_type length2 );
返回值如下:
| 返回值 | 情况 | | —— | ——— | | 小于零 | this<str | | 零 | this==str | | 大于零 | this>str |
函数作用:
比较自己和str,
比较自己的子串和str,子串以index索引开始,长度为length
比较自己的子串和str的子串,其中index2和length2引用str,index和length引用自己
比较自己的子串和str的子串,其中str的子串以索引0开始,长度为length2,自己的子串以index开始,长度为length
十、查找
1.find()
size_type find( const basic_string &str, size_type index );
size_type find( const char *str, size_type index );
size_type find( const char *str, size_type index, size_type length );
size_type find( char ch, size_type index );
返回str在字符串中第一次出现的位置(从index开始查找)*。*如果没找到则返回string::npos,
返回str在字符串中第一次出现的位置(从index开始查找,长度为length)。如果没找到就返回string::npos,
返回字符ch在字符串中第一次出现的位置(从index开始查找)。如果没找到就返回string::npos
2.find_first_of()
size_type find_first_of( const basic_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 );
查找在字符串中第一个与str中的某个字符匹配的字符,返回它的位置。搜索从index开始,如果没找到就返回string::npos
查找在字符串中第一个与str中的某个字符匹配的字符,返回它的位置。搜索从index开始,最多搜索num个字符。如果没找到就返回string::npos,
查找在字符串中第一个与ch匹配的字符,返回它的位置。搜索从index开始。
3.find_first_not_of()
size_type find_first_not_of( const basic_string &str, size_type index = 0 );
size_type find_first_not_of( const char *str, size_type index = 0 );
size_type find_first_not_of( const char *str, size_type index, size_type num );
size_type find_first_not_of( char ch, size_type index = 0 );
在字符串中查找第一个与str中的字符都不匹配的字符,返回它的位置。搜索从index开始。如果没找到就返回string::nops
在字符串中查找第一个与str中的字符都不匹配的字符,返回它的位置。搜索从index开始,最多查找num个字符。如果没找到就返回string::nops
在字符串中查找第一个与ch不匹配的字符,返回它的位置。搜索从index开始。如果没找到就返回string::nops
4.find_last_of()
size_type find_last_of( const basic_string &str, size_type index = npos );
size_type find_last_of( const char *str, size_type index = npos );
size_type find_last_of( const char *str, size_type index, size_type num );
size_type find_last_of( char ch, size_type index = npos );
在字符串中查找最后一个与str中的某个字符匹配的字符,返回它的位置。搜索从index开始。如果没找到就返回string::nops
在字符串中查找最后一个与str中的某个字符匹配的字符,返回它的位置。搜索从index开始,最多搜索num个字符。如果没找到就返回string::nops
在字符串中查找最后一个与ch匹配的字符,返回它的位置。搜索从index开始。如果没找到就返回string::nops
5.find_last_not_of
size_type find_last_not_of( const basic_string &str, size_type index = npos );
size_type find_last_not_of( const char *str, size_type index = npos);
size_type find_last_not_of( const char *str, size_type index, size_type num );
size_type find_last_not_of( char ch, size_type index = npos );
十一、其他函数
| 函数 | 作用 |
| :——————————–: | :———————————: |
| void clear() noexcept | 清除内容 |
| void push_back(CharT ch) | 若导致size()>max_size(),抛出异常 |
| void pop_back() noexcept | 从字符串移除末字符 |
| void swap( basic_string &str ) | 把str和本字符串交换 |
元素访问
| 函数 | 作用 | | ————————————— | —————————— | | const CharT& front() const | 返回首字符的引用 | | const CharT& back() const | 返回字符串中的末字符 | | const char data() | 返回指向自己的第一个字符的指针 | | const CharT c_str() const noexcept | 返回c风格的string,带有\0。 |
容量
| 函数 | 作用 | | —————————————– | ———————————————————— | | bool empty() | 字符串为空则返回true,否则返回false | | size_type size() | 返回字符串中现在拥有的字符数 | | size_type length() | 返回字符串的长度,应该和size()返回的数字相同 | | size_type max_size() | 返回string能保存的最大字符数 | | void reserve( size_type num ) | 设置本string的存储空间 | | size_type capacity() | 返回string在不重新申请空间的情况下还可以储存的字符数 | | void resize( size_type num ) | 改变本字符串的大小到num, 新空间的内容不确定 | | void resize( size_type num, char ch ) | 改变本字符串的大小到num,并使用ch进行填充 | | void shrink_to_fit() | 减少 capacity() 到 size() 的非强制请求。是否满足请求取依赖于实现 |
数值转换
| 函数 | 作用 | | ———————————————————— | —————————————————— | | std::atoi(const std::string&str,std::size_t* pos=0,int base=10) | str 指要处理的字符,base使数的进制,返回值为无符号整数 | | stol | 同上 | | stoll | 同上 | | stoul | 返回值为无符号整数 | | stoull | 同上 | | to_string | 将整数或浮点数转换为string |
十二、迭代器
1. begin()和end()
iterator begin(); //返回一个迭代器,指向string的首字符
iterator end(); //返回一个迭代器,指向string的最后一个字符的下一个位置
2.erase()
iterator erase( iterator pos );
iterator erase( iterator start, iterator end );
basic_string &erase( size_type index = 0, size_type num = npos );
3.rbegin
const reverse_iterator rbegin()
rbegin()返回一个逆向迭代器,指向字符串的最后一个字符
4.rend
` const reverse_iterator rend(); `
rend()函数返回一个逆向迭代器,指向字符串的开头(第一个字符的前一个位置)。
5.rfind
size_type rfind( const basic_string &str, size_type index );
size_type rfind( const char *str, size_type index );
size_type rfind( const char *str, size_type index, size_type num );
size_type rfind( char ch, size_type index );
返回最后一个与str中的某个字符匹配的字符,从index开始查找。如果没找到就返回string::npos
返回最后一个与str中的某个字符匹配的字符,从index开始查找,最多查找num个字符。如果没找到就返回string::npos
返回最后一个与ch匹配的字符,从index开始查找。如果没找到就返回string::npos
迭代器
尽管使用 string[1] 也可以拿到数据,但是在使用 erease 的时候必须使用迭代器 string.begin() + 1。要不然会出现一起奇怪的行为