1、介绍
char*的字符串、C++标准程序库中的string类区别:string类不必担心内存是否足够、字符串长度等等,而且作为一个泛型类出现,集成的操作函数足以完成大多数情况下的需要。
C++中对于strinig的定义为:typedef basic_string string; 也就是说C++中的string类是一个泛型类,由模板而实例化的一个标准类,本质上不是一个标准数据类型。
使用string类必须包含头文件:#include <string>
2、string库函数
2.1、构造函数
函数原型:
(1)string s; //生成一个空字符串s
(2)string s(str) //拷贝构造函数 生成str的复制品
(3)string s(str,stridx) //将字符串str内“始于位置stridx”的部分当作字符串的初值
(4)string s(str,stridx,strlen) //将字符串str内“始于stridx且长度顶多strlen”的部分作为字符串的初值
(5)string s(cstr) //将C字符串作为s的初值
(6)string s(chars,chars_len) //将C字符串前chars_len个字符作为字符串s的初值
(7)string s(num,c) //生成一个字符串,包含num个c字符
(8)string s(beg,end) //以区间beg;end(不包含end)内的字符作为字符串s的初值
2.2、操作函数
函数原型:
(1)=, assign() //赋以新值
(2)swap() //交换两个字符串的内容
(3)+=, append(), push_back() //在尾部添加字符
(4)insert() //插入字符
(5)erase() //删除字符
(6)clear() //删除全部字符
(7)replace() //替换字符
(8) + //串联字符串
(9)==, !=, <, <=, >, >=, compare() //比较字符串
(10)size(), length() //返回字符数量
(11)max_size() //返回字符的可能最大个数
(12)empty() //判断字符串是否为空
(13)capacity() //返回重新分配之前的字符容量
(14)reserve() //保留一定量内存以容纳一定数量的字符
(15) [ ], at() //存取单一字符
(16)>>, getline() //从stream读取某值
(17)<< //将谋值写入stream
(18)copy() //将某值赋值为一个C_string
(19)c_str() //将内容以C_string返回
(20)data() //将内容以字符数组形式返回
(21)substr() //返回某个子字符串
(22)begin() end() //提供类似STL的迭代器支持
(23)rbegin() rend() //逆向迭代器
(24)get_allocator() //返回配置器
3、示例
#include <string>
#include <iostream>
using namespace std;
void print_string(string v)
{
cout << "string v is: " << v.c_str() << endl;
}
int main()
{
string s1 = "abcdefgjijklmn";
string s2(s1);
string s3(s1, 5);
string s4(s1, 5, 3);
print_string(s1);
print_string(s2);
print_string(s3);
print_string(s4);
cout << endl << "交换两个字符串: " << endl;
swap(s1, s3);
print_string(s1);
print_string(s3);
cout << endl << "添加字符串: " << endl;
s1 += "1234567890"; // 追加字符串
print_string(s1);
s1.append("1234567890"); // 追加字符串
print_string(s1);
s1.push_back('a'); // 追加字符
print_string(s1);
cout << endl << "插入字符串: " << endl;
s2.insert(1, 2, 'S'); // 在index=1位置插入count=2个字符ch='S'
print_string(s2);
s2.insert(2, "AAAA"); // 在index=2位置插入一个常量字符串=“AAAA”
print_string(s2);
s2.insert(2, "BBBBBB", 3); // 在index=2位置插入一个常量字符串=“BBBBBB”中的3个字符
print_string(s2);
cout << endl << "删除字符: " << endl;
s2.erase(13); //从索引13开始往后全删除
print_string(s2);
s2.erase(7, 5); //从索引7开始往后删5个
print_string(s2);
cout << endl << "替换字符: " << endl;
s2.replace(1, 2, "nihaoazhongguo"); //从索引1开始的2个替换成后面的C_string
print_string(s2);
cout << endl << "更改字符: " << endl;
string s5;
s5.assign(s2, 1, 3); //如果str是”iamangel” 就是把”ama”赋给字符串
print_string(s5);
cout << endl << "提取字符: " << endl;
cout << s1.substr() << endl; //返回s的全部内容
cout << s1.substr(11) << endl; //从索引11往后的子串
cout << s1.substr(5, 6) << endl; //从索引5开始6个字符
return 0;
}
结果为:
string v is: abcdefgjijklmn
string v is: abcdefgjijklmn
string v is: fgjijklmn
string v is: fgj
交换两个字符串:
string v is: fgjijklmn
string v is: abcdefgjijklmn
添加字符串:
string v is: fgjijklmn1234567890
string v is: fgjijklmn12345678901234567890
string v is: fgjijklmn12345678901234567890a
插入字符串:
string v is: aSSbcdefgjijklmn
string v is: aSAAAASbcdefgjijklmn
string v is: aSBBBAAAASbcdefgjijklmn
删除字符:
string v is: aSBBBAAAASbcd
string v is: aSBBBAAd
替换字符:
string v is: anihaoazhongguoBBAAd
更改字符:
string v is: nih
提取字符:
fgjijklmn12345678901234567890a
345678901234567890a
klmn12