C++ 容器 string类
一、string类的构造函数
1 默认构造 string s1;
2 拷贝构造 string s2(s1);
3 有参构造 string s3(“aaa”);
4 两个参数有参构造 string s4(3,‘c’);
// string类的构造函数
string s1; //默认构造
string s2(s1); //拷贝构造
string s3("aaa"); //有参构造
string s4(3, 'c'); //两个参数有参构造
cout << "字符串s1为:"<<s1 << endl;
cout <<"字符串s2为:"<< s2 << endl;
cout <<"字符串s3为:"<< s3 << endl;
cout <<"字符串s4为:"<< s4 << endl;
字符串s1为:
字符串s2为:
字符串s3为:aaa
字符串s4为:ccc
二、string类的赋值操作
1、string& assign(const char *s,int n); 把字符串s的前n个字符串赋给当前的字符串
2、string& assign(const string &s,int start,int n); 将s从start开始n个字符赋值给字符串
//string类的赋值操作
string s5;
//string& assign(const char *s,int n); 把字符串s的前n个字符赋给当前的字符串
s5.assign("asddfsdsgdsgd", 8);
cout << "s5=" << s5 << endl;
//string& assign(const string &s,int start,int n); 将s从start开始n个字符赋值给字符串(从0开始计算)
string s6 = "asdfdgfaghd";
string s7;
s7.assign(s6, 4, 5);
cout << "s7=" << s7 << endl;
输出:
s5=asddfsds
s7=dgfag
三、string类的存储操作
1、通过下标获取字符[]
2、通过at获取字符
3、at和[]的区别:[]访问越界直接挂掉,而at访问越界会自动抛出一个异常
string s = "hello world!";
for (int i = 0; i < s.size(); i++)
{
cout << s[i] << endl;//通过[]获取字符
cout << s.at(i) << endl;//通过at获取字符
}
try
{
//s[100];
s.at(100);
}
catch (out_of_range &e)
{
cout << e.what() << endl;
}
h
h
e
e
l
l
l
l
o
o
w
w
o
o
r
r
l
l
d
d
!
!
invalid string position
四、string的拼接操作
s.append(args) ,将args追加到s。返回一个指向s的引用
string str1 = "我";
string str2 = "爱北京";
str1 += str2;
cout << "str1="<<str1 << endl;
string str3 = "天安门";
str1.append("故宫");
cout << "新的str1为:" << str1 << endl;
输出:
str1=我爱北京
新的str1为:我爱北京故宫
五、string的查找与替换
1、find(),找到子串返回第一个出现的位置,如果找不到子串,直接返回-1。
2、rfind(),rfind的区别是“r”代表“right”
3、replace代表替换,替换从pos开始n个字符为字符串
s.replace(range,args) 删除s中范围range内的字符,替换为args指定的字符。range或者是一个下标和一个长度,或者是一对指向s的迭代器。返回一个指向s的引用
string str1 = "ABCDEFGHIJKDE";
int pos1 = str1.find("DE");
int pos2 = str1.rfind("DE");
cout << "pos1=" << pos1 << endl;
cout << "pos2=" << pos2 << endl;
str1.replace(3, 4, "126");
cout << "str1"<<str1 << endl;
输出:
pos1=3
pos2=11
str1ABC126HIJKDE
六、string字符串的比较
compare函数类似strcmp,根据s是等于、大于还是小于参数指定的字符串,s.compare返回0、正数或负数。
string str1 = "ABCDE";
string str2 = "ABCDE";
if (str1.compare(str2) == 0)
{
cout << "str1==strr2" << endl;
}
else if (str1.compare(str2) > 0)
{
cout << "str1>str2" << endl;
}
else
{
cout << "str1<str2" << endl;
}
输出:
str1==strr2
七、string子串
s.substr(pos,n) 返回一个string ,包含s中从pos开始的n个字符的拷贝。pos的默认值为0。n的默认值为s.size()-pos,即拷贝从pos开始的所有字符
string str = "ABCDE";
string subStr = str.substr(1, 3);
cout << "subStr=" << subStr << endl;
string email = "[email protected]";
int pos = email.find("@");
string userName = email.substr(0, pos);
cout << userName << endl;
输出
subStr=BCD
782347428
八、string的插入和删除
1、s.insert(pos,args),在pos之前插入args指定的字符。pos可以是一个下标或一个迭代器。接收下标的版本返回一个指向s的引用;接受迭代器的版本返回指向第一个插入字符的迭代器。
2、s.erase(pos,len) ,删除从位置pos开始的len个字符。如果len被省略,则删除从pos开始直至s末尾的所有字符。返回一个指向s的引用。
string str = "hello";
str.insert(1, "111");//插入字符串
cout << "str=" << str << endl;
str.erase(1, 3);//删除从Pos开始的n个字符
cout << "str=" << str << endl;
输出:
str=hlllello
str=hello