1 string的构造函数的形式
string str1 = "123re23r";
std::cout << str1 << " addr:" << &str1 << endl;//123re23r addr:0x9c88dff860
string str2(str1);
std::cout << str2 << " addr:" << &str2 << endl;//123re23r addr:0x9c88dff840
string str3(str1, 0, 3);
std::cout << str3 << " addr:" << &str3 << endl;//123 addr:0x9c88dff820
string str4(str1, 3);
std::cout << str4 << " addr:" << &str4 << endl;//re23r addr:0x9c88dff800
string str5(4, 'a');
std::cout << str5 << " addr:" << &str5 << endl;//aaaa addr:0x9c88dff7e0
2 string的大小和容量
std::cout << str1 << "'s size:" << str1.size() << endl;//123re23r's size:8
std::cout << str1 << "'s length:" << str1.length() << endl;//123re23r's length:8
3 string的插入
str1.push_back('h');
str1.push_back('g');
str1.push_back('k');
std::cout << str1 << " addr:" << &str1 << endl;//123re23rhgk addr:0x9c88dff860
str1.insert(str1.begin() + 2, 'p');
std::cout << str1 << " addr:" << &str1 << endl;//12p3re23rhgk addr:0x9c88dff860
4 string拼接字符串
str1.append("lll");
std::cout << str1 << " addr:" << &str1 << endl;//12p3re23rhgklll addr:0x9c88dff860
str1 += "lll";
std::cout << str1 << " addr:" << &str1 << endl;//12p3re23rhgkllllll addr:0x9c88dff860
5 string的遍历
auto iter = str1.begin();
for (; iter < str1.end(); iter++)
{
cout << *iter;
}
cout << endl;//12p3re23rhgkllllll
auto riter = str1.rbegin();
for (; riter < str1.rend(); riter++)
{
cout << *riter;
}
cout << endl;//llllllkghr32er3p21
6 string的删除
str1.erase(str1.begin() + 1);
std::cout << str1 << " addr:" << &str1 << endl;//1p3re23rhgkllllll addr:0x9c88dff860
str1.erase(str1.begin() + 1, str1.end() - 2);
std::cout << str1 << " addr:" << &str1 << endl;//1ll addr:0x9c88dff860
str1.erase(1, 6);
std::cout << str1 << " addr:" << &str1 << endl;//1 addr:0x9c88dff860
str1.clear();
std::cout << str1 << " addr:" << &str1 << endl;
7 string的字符替换
string s1("hello,world!");
s1.replace(6, 5, "girl"); // 结果:hello,girl.
s1.replace(s1.size() - 1, 1, 1, '.'); // 结果:hello,world.
s1.replace(s1.begin(), s1.begin() + 5, "boy"); // 结果:boy,girl.
8 string大小写转换
for (int i = 0; i < str2.size(); i++)
{
str2[i] = tolower(str2[i]); // toupper(str2[i]);
}
std::cout << str2 << " addr:" << &str2 << endl;
9 string的查找
string s("dog bird chicken bird cat");
std::cout << s.find("chicken") << endl; //查找字符串的索引
std::cout << s.find("i", 6) << endl; //从索引为6的字符开始查找
std::cout << s.rfind("chicken") << endl; //从字符串末尾开始查找,但是索引还是从首字符开始计算的。
std::cout << s.find_first_of("13br98") << endl; //在该字符串中查找第一个属于字符串“13br98”的字符索引
// 6. 在该字符串中查找第一个不属于字符串s的字符,先匹配dog,然后bird匹配不到,所以打印4
std::cout << s.find_first_not_of("hello dog 2006") << endl; // 结果是:4
// 7. 在该字符串从后往前查找第一个属于字符串s的字符
std::cout << s.find_last_of("13r98") << endl; // 结果是:19
// 8. 在该字符串从后往前查找第一个不属于字符串s的字符,先匹配tac,然后空格匹配不到,所以打印21
std::cout << s.find_last_not_of("teac") << endl; // 结果是:21
10 string的排序
string ss = "dog bird chicken bird cat";
std::sort(ss.begin(), ss.end()); // sort(iterator iter1, iterator iter2):对[iter1, iter2)进行排序
std::cout << ss << endl;
11 string的分割和截取
string ss = "dog bird chicken bird cat";
ss = ss.substr(4, 4);
std::cout << ss << endl;
//将字符串str以split中的字符分割
string str("I,am,a,student; hello world!");
string split(",; !");
int currIndex = 0;
int splitIndex = 0;
while (currIndex < str.size())
{
splitIndex = str.find_first_of(split, currIndex);
if (splitIndex == -1)
splitIndex = str.size();
if (splitIndex != currIndex)
cout << str.substr(currIndex, splitIndex - currIndex) << endl;
currIndex = splitIndex + 1;
}
12 string和数值之间的转换
int a = 10;
float b = 20.2;
string as = to_string(a);
std::cout << as << endl;
a = stoi(as, 0, 10);
string bs = to_string(b);
std::cout << bs << endl;
b = stof(bs, 0);
a = stoi("0xFF", 0, 16);
std::cout << setbase(16) << "0x" << a << endl;
to_string(val):返回数值val的string表示。
stoi(s,p,b),包括其他整形:s是字符串;p是size_t指针,用来保存s中第一个非数值字符的下标,p默认为0,表示函数不保存下标;b表示转换所用的基数,默认值为10。
stof(s,p):和整形的转换方法类似,少了转换基数参数。