string容器是一个类;
构造
string s; 空字符串
string s(s2); 拷贝构造
string s(s2, index); 从s2的index处拷贝构造, 注:下标从0开始;
string s = "abc"; 或 string s("abc");
eg:
string s;
string s1 = "123";
s = s1; //s = "abc"
s += "123"; //s = "abc123"
s += s1; //s = "abc123abc"
输入带空格的字符串用getline(cin, s);
cin >> s 遇空格停止;
s.size() 与 s.length()都表示s内元素个数
s.empty(); 判断是否为空,空为true
赋值
s.assign(s1); 将s1赋值给s
s.assign(s1, 2, 3); 从s1的2位置开始保留3个字符
s.assign("Hello", 4); 保留4个字符
查找
eg:
string s = "0101";
int pos = s.find("01"); pos=0(返回的是要查找的字符串的第一个字符的下标);
pos = s.rfind("01"); pos=2(返回的是要查找的字符串的第一个字符的下标);
find是从前往后找;
rfind是从后往前找;
如果没找到返回s.npos;
s.find("Hi", 2); 从下标2开始往后找;
s.find('A'); 单字符用'';
s.find(s1); 查找s1返回s1第一个字符的下标;
插入
eg:
string s = "0101";
s.insert(2, "abc"); 在2的位置插入"abc";
此时s = "01abc01"; 注:把原来2位置的元素往后移,然后插入;
eg2:
string s = "01";
s.insert(1, "STRING", 3); 在s的1位置处插入 " " 内的前三个字符;
此时s = 0STR1;
eg3:
string s = "01";
string s1 = "abcd";
s.insert(0, s1, 2, 3); 在s的0处插入s1的[2,3]区间内容;
此时s = "cd01";
删除
s.erase(pos); 删除pos处的元素;
eg2:
string s = "012345";
s.erase(0, 2); 删除从0开始的2个字符
此时s = "2345"; 注:第一个参数是位置,第二个参数是个数;
替换
eg:
string s = "01234";
s.replace(0, 2, "abc"); s从0处开始之后的2个字符替换为abc;
此时s = "abc234";
子串
eg:
string s = "0123";
string s1 = s.substr(1, 2); 从s的1处开始截取长度为2的子串赋给s1;
此时s1 = "12";
如果是 s1 = s.substr(1);一个参数的话就是从s的1处到末尾赋给s1;
此时s1 = "123";
比较
s.compare(s1);
一般情况下:s1大于s返回-1,s1等于s返回0,小于返回1;
at函数
s.at(0)与s[0]都是代表这个元素;
区别:[]方式如果访问越界,程序错误;
at方式访问越界抛异常out_of_range
eg:(一般用不到)
try {
cout << s.at(29); //越界
}
catch(...) {
cout << "越界!" << endl;
}
会输出"越界!";