string类
构造函数:
string(); //默认构造函数
string (const string& str); //拷贝构造函数
string (const string& str, size_t pos, size_t len = npos);//子串的构造函数
string (const char* s); //使用C语言风格的字符串构造
string (const char* s, size_t n); //从s所指的字符数组中复制前n个字符。
string (size_t n, char c);//用字符c的n个连续副本填充字符串。
template <class InputIterator>
string (InputIterator first, InputIterator last);//使用迭代器构造字符串
示例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
using namespace std;
void test()
{
string str;
string str1("abcdefgh");
string str2(str1);
string str3(str1,0,5);
string str4("zxcvbnm",5);
string str5(5,'x');
}
int main()
{
test();
return 0;
}
结果:
string类对象的容量操作接口
函数名称 | 功能 |
---|---|
size | 返回字符串有效字符长度 |
length | 返回字符串有效字符长度 |
capacity | 返回容量大小 |
empty | 检测字符串是否为空串,是返回true,否返回false |
clear | 清空有效字符 |
reserve | 调整字符串容量大小 |
resize | 将有效字符个数设置为n个,多出的空间用字符c填充 |
注意:
- size()与length()方法底层实现原理完全相同,引入size()的原因是为了与其他容器的接口保持一致,一般情况下基本都是用size()。
- clear()只是将string中有效字符清空,不改变底层空间大小。
- resize(size_t n) 与 resize(size_t n, char c)都是将字符串中有效字符个数改变到n个,不同的是当字符个数增多时:resize(n)用0来填充多出的元素空间,resize(size_t n, char c)用字符c来填充多出的元素空间。
注意:resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大小,如果是将元素个数减少,底层空间总大小不变。- reserve(size_t res_arg=0):为string预留空间,不改变有效元素个数,当reserve的参数小于
string的底层空间总大小时,reserver不会改变容量大小。
string::operator+=
+=相当于尾插的操作
string& operator+= (const string& str);
string& operator+= (const char* s);
string& operator+= (char c);
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str1;
string str2 = "123";
str1 += str2;//123
str1 += "abc";//123abc
str1 += 'x';//123abcx
return 0;
}
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 <class InputIterator>
string& append (InputIterator first, InputIterator last);
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
string str2 = "123";
//string& append(const string& str);
str.append(str2);//123
str.append(str2);//123123
cout << str << endl;
//string& append(const string& str, size_t subpos, size_t sublen);
str.append(str2,0,2);//12312312
cout << str << endl;
//string& append(const char* s);
str.append("abc");//12312312abc
cout << str << endl;
//string& append(const char* s, size_t n);
str.append("zxcvbnm",4);//12312312abczxcv
cout << str << endl;
//string& append(size_t n, char c);
str.append(3,'x');//12312312abczxcvxxx
cout << str << endl;
/*template \<class InputIterator>
string& append (InputIterator first, InputIterator last);*/
str.append(str2.begin(),str2.end());//12312312abczxcvxxx123
cout << str << endl;
char s[] = "369";
str.append(s, s + sizeof(s) / sizeof(s[0]));//12312312abczxcvxxx123369
cout << str << endl;
return 0;
}
输出结果:
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 <class InputIterator>void insert (iterator p, InputIterator first, InputIterator last);
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str = "mm";
string str2 = "123";
//string& insert(size_t pos, const string& str);
str.insert(1,str2);//m123m
cout << str << endl;
//string& insert(size_t pos, const string& str, size_t subpos, size_t sublen);
str.insert(1,str2,1,2);//m23123m
cout << str << endl;
//string& insert(size_t pos, const char* s);
str.insert(0,"abc");//abcm23123m
cout << str << endl;
//string& insert(size_t pos, const char* s, size_t n);
str.insert(0,"000000",5);//00000zbcm23123m
cout << str << endl;
/*string& insert(size_t pos, size_t n, char c);
void insert(iterator p, size_t n, char c);*/
str.insert(str.begin(),3,'x');//xxx00000zbcm23123m
cout << str << endl;
//iterator insert(iterator p, char c);
/*template \<class InputIterator>
>> void insert(iterator p, InputIterator first, InputIterator last);*/
str.insert(str.end(),str2.begin(),str2.end());//xxx00000zbcm23123m123
cout << str << endl;
}
运行结果: