解读STL的string类中各方法的使用场景
所在头文件:
创新互联是一家专业提供将乐企业网站建设,专注与成都网站制作、网站建设、成都h5网站建设、小程序制作等业务。10年已为将乐众多企业、政府机构等服务。创新互联专业网络公司优惠进行中。
实现:typedf basic_string
所在命名空间:std
功能:标准string提供字节标准容器的接口,同事增加对字符串中单独的字符的操作。由于标准string是basic_string
(1)成员函数number functions
constructor(构造函数) | 创建string对象 (公有成员函数) |
destructor (析构函数) | 销毁string对象(公有成员函数) |
operator= (赋值运算符重载) | 将一个string对象赋给另一个string对象 (公有成员函数) |
(2)Iterators
begin | iterator begin(); const_iterator begin() const; | 返回一个迭代器指向string对象的第一个字符 |
end | iterator end() noexcept; const_iterator end() const noexcept; (noexcept是c11对异常的处理方式) | 返回一个迭代器指向string对象的结束字符的位置(‘\0’处),不可引用 如果是空串end=begin |
rbegin | reverse_iterator rbegin() noexcept; const_reverse_iterator rbegin() const noexcept; | 返回一个反向迭代器指向string对象的结束字符的位置 反向迭代器向后遍历-->向begin走 |
rend | reverse_iterator rend() noexcept; const_reverse_iterator rend() const noexcept; | 返回一个反向迭代器指向string对象的第一个字符的位置 |
cbegin | const_iterator cbegin() const noexcept; | 返回一个const迭代器指向string对象的第一个字符的位置 |
cend | const_iterator cend() const noexcept; | 返回一个const迭代器指向string对象的结束字符的位置 |
crbegin | const_reverse_iterator crbegin() const noexcept; | 返回一个const反向迭代器指向string对象的结束字符的位置 |
crend | const_reverse_iterator crend() const noexcept; | 返回一个const反向迭代器指向string对象的第一个字符的位置 |
例子:
// string::begin/end #include#include using namespace std: void test1() { string str ("Test string"); for(string::iterator it=str.begin(); it!=str.end(); ++it) { cout << *it; } cout < (3)Capacity
size size_t size() const noexcept; 返回string的字节个数(size_t类型)
size!=capacity
length size_t length() const noexcept; 返回string的字节个数(size_t类型)
length!=capacity
max_size size_t max_size() const noexcept; 返回string可以达到的最大长度
(极限范围,可能按max_size内存分配失败)
max_size!=capacity
resize void resize (size_t n);
void resize (size_t n, char c);重置string的长度,设置为n
重置string的长度,设置为n,内容用c填充
如果n
如果n>string的原length,先拷贝原先的在加上
c的部分(没有c,就是空字符)
capacity size_t capacity() const noexcept; 返回已分配给string的内存的字节个数 reverse void reserve (size_t n = 0); 改变string的capacity为n
不改变length和内容
clear void clear() noexcept; 清除string的内容,让string变成一个空串
length=0
empty bool empty() const noexcept; 返回string是否为空,为空返回true,非空返回
false
shrink_to_fit void shrink_to_fit(); 减小string的capacity到size大小 例子:
#include#include using namespace std; // comparing size, length, capacity and max_size void test1 () { string str ("Test string"); cout <<"size: "<< str.size() < (4)Element access
operator[] char& operator[] (size_t pos);
const char& operator[] (size_t pos) const;返回string[pos]的字符 at char& at (size_t pos);
const char& at (size_t pos) const;返回string[pop]的字符前会检查pos是不是字符范围内,超出范围会抛异常 back char& back();
const char& back() const;返回最后一个字符的引用 front char& front();
const char& front() const;返回第一个字符的引用 例子:
#include#include using namespace std; //string::operator[] void test1() { string str ("Test string"); for(int i=0; i (5)Modifiers
operator+= string& operator+= (const string& str);
string& operator+= (const char* s);
string& operator+= (char n);
string& operator+= (initializer_list
il); 在现有的string后面添加字符串/字符 append string& append (const string& str);
string& append (const string& str, size_t subpos, size_t sublen);
string& append (const char* s);
string& append (const char* s, size_t n);
string& append (size_t n, char c);
template
string& append (InputIterator first, InputIterator last);string& append (initializer_list
il); 在现有的string后面添加字符串/字符 push_back void push_back(char c); 将字符c添加在string末尾,length++ assign string& assign(const string& str);
string& assign(const string& str, size_t subpos, size_t sublen);
string& assign(const char * s);
string& assign(const char *s,size_t n);
string &assign(size_t n,char c);
template
string& assign(InputIterator first,InputIterator last);
string& assign(initializer_list
il); 将现有的字符串string替换成新的字符串 insert string & insert (size_t pos,const string & str );
string & insert (size_t pos,const string & str,size_t subpos,size_t sublen);
string & insert(size_t pos,const char *s);
string & insert(size_t pos,const char *s,size_t n);
string & insert(size_t pos,size_t n,char c);
void insert (iterator p, size_t n, char c);
iterator insert (iterator p, char c);
template
void insert (iterator p, InputIterator first, InputIterator last);将现有字符串string的pos位置后面插入字符串或者字符 erase string & erase(size_t pos=o,size_t len=pos);
iterator erase(iterator p);
iterator erase(iterator first,iterator last);
将现有字符串删除一部分,length也有减少 replace string & repalce(size_t pos,size_t len,const string& str);
string & repalce(iterator i1,iterator i2,const string &str);
string & repalce (size_t pos,size_t len,const string & str,size_t subpos,size_t sublen);
string & replace(size_t pos,size_t len,const char *s);
string & replace(iterator i1,iterator i2,const char *s);
string & repalce(size_t pos,size_t len,const char*s,size_t n);
string & repalce(iterator i1,iterator i2,const char*s,size_t n);
string & raplace(size_t pos,size_t len,size_t n,char c);
string & repalce(iterator i1,iterator i2,size_t n,chr c);
template
string & repalce(iterator i1, iterator i2,InputIterator first,InputIterator last);
将现有字符串的一部分用新的字符串或者字符序列,字符去替换 swap void swap(string & str); 两个字符串的内容进行交换 pop_back void pop_back();
将字符串末尾的字符删除 例子:
#include#include using namespace std; // string::operator+= void test1() { string name ("John"); string family ("Smith"); name +=" K. "; // c-string name += family; // string name +='\n'; // character cout << name; } //string::append void test2() { string str; string str2="Writing "; string str3="print 10 and then 5 more"; //string& append(const string &str); str.append(str2); //Writing //string& append(const string &str,size_t pos,size_t length); str.append(str3,6,3);//Writing 10 //string& append(const char* s,size_t n); str.append("dots are cool",5);//Writing 10 dots //string& append(const char *s); str.append("here: ");//Writing 10 dots here: //string& append(size_t n,char c); str.append(10u,'.');//Writing 10 dots here: .......... //strin& append(inputIterator first,inputIterator last); str.append(str3.begin()+8,str3.end()); //Writing 10 dots here:......... and then 5 more //string& append(size_t n,) str.append (5,0x2E); //Writing 10 dots here:......... and then 5 more..... cout << str < (10,0x2D); cout << str < (6)String operations
c_str const char * c_str()const; 返回一个const char *型的指针,内容是string的内容+‘\0’ data const char * data()const; 返回一个const char *型的指针,即得到string对象的c_string形式 get_allocator
allocator_type get_allocator()const; 返回一个allocator——type型的string的拷贝 copy size_t copy(char*s,size_t len,size_t pos=0)const; 拷贝一个string中的子串到s所指的数组
(拷贝版不会自己添加'\0')
find size_t find(cosnt string &str,size_t pos=0)const;
size_t find(const char *s,size_t pos=0)const;
size_t find(const char *s,size_t pos,size_t n)const;
size_t find(char c,size_t pos=0)const;
查找所找字符串序列第一次出现的位置 substr string substr(size_t pos=0,size_t len=npos)const;
返回子串 compare int compare(const string& str)const;
int compare(size_t pos,size_t len,const string &str)const;
int compare(size_t pos,size_t len,const string &str,size_t subpos,size_t
sublen)const;
int compare(const char* s)const;
int compare(size_t pos,size_t len,const char *s)const;
int compare(size_t pos,size_tlen,const char *s,size_t n)const;
比较两个字符串 例子:
#include#include using namespace std; //string::c_str() void test1() { string str ("Please split this sentence into tokens"); char* cstr =newchar[str.length()+1]; strcpy (cstr, str.c_str()); // cstr now contains a c-string copy of str char* p = strtok (cstr," "); //线程不安全的字符串分割函数 while(p!=0) { cout << p < (7)成员常量
npos size_t的最大范围
static const int npos=-1;
(定义时就初始化)
(8)非成员函数的重载
operator+ 串联字符串 relational operator 各种运算符的重载
swap 交换两个字符串,std所属函数,非string所属
operator>>
输入一个字符串
operator<< 输出一个字符串
getline 将输入的数据is传入到str字符串中,遇到定界符delim时停止
将输入的数据is传入到str字符串中,到文件结束
当前文章:解读STL的string类中各方法的使用场景
浏览路径:http://hbruida.cn/article/jhhcee.html