头文件:
#include<string>
string初始化:
string s1 = "aaa";
string s2("aaa");
string s3 = s1;
string s4(10, 'a');
string遍历:
(1)数组方式
for(int i = 0; i < s1.length(); i++) {
cout << s1[i] << endl; //出现错误不会抛异常,引起程序中断
cout << s1.at(i) << endl; //出现错误会抛异常
}
(2)迭代器
for( string::iterator it = s1.begin(); it != s1.end(); it++) {
cout << *it << endl;
}
char *和string的转换:
// char* -> string
string s1 = "aaaaaaaa";
//string -> char*
printf("s1:%s \n", s1.c_str());
//string -> buffer
char buf[128] = {0};
s1.copy(buf, 3, 0); // 从s1的0号位置拷贝3个字符到buf中,但结尾不会加\0
连接string:
string s1 = "aaaa";
string s2 = "bbbb";
//方法1
s1 = s1 + s2;
//方法2
s1.append(s2);
string查找和替换:
string s1 = "hello i am hi i am hello an am";
int idx = s1.find("am", 0); //从0位置开始查找第一次出现“am”的位置,找不到返回-1
// 查找所有“am”出现的位置
int idx = s1.find("am", 0)
while(idx != s1.npos) {
cout << idx << " ";
idx = s1.find("am", idx+1);
}
// 替换:小写换成大写
int idx = s1.find("am", 0)
while(idx != s1.npos) {
cout << idx << " ";
s1.replace(idx, 2, "AM"); // 先删除idx开始后面的2个字符,然后在idx处插入“AM”
idx = s1.find("am", idx+1);
}
cout << s1 <<endl;
string区间删除和插入:
//删除
string::iterator it = find(s1.begin(), s1.end(), 'a');
if(it != s1.end()) {
s1.erase(it); // 删除it位置的字符
}
s1.erase(s1.begin(), s1.end()); // 删除一个区间的所有字符
// 插入
s1.insert(0,"AAA"); // 头插法:从0号位置插入字符串
s1.insert(s1.length(), "CCC"); // 尾插法
string与算法相关:
string s1 = "AAAcccc";
//小写换大写
transform(s1.begin(), s1.end(), s1.begin(), toupper); //最后一个参数可以是回调函数的入口地址、
//函数对象或者预定义的函数对象
transform(s1.begin(), s1.end(), s1.begin(), tolower);