// string类的实操.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <string>
using namespace std;
int main()
{
// 初始化
string str1 = "666999sajkskasj"; // 拷贝构造函数赋值
string str2(str1); // 构造函数赋值
string str3(str1.begin(), str1.end()); // 迭代器赋值
string str4;
char ch1[] = "adnmsdid";
str4.assign(ch1, 0, 7);
string str5;
str5.assign(str1,9); // 从第9个字符开始读到最后
// 访问字符元素
cout << str1[1] << endl;
cout << str1.at(5) << endl;
// 查找字符元素或子字符串
str5.clear();
int Place1 = str5.find("ad", 8); // 从第8个位置开始查询"ad"的字符位置
cout << (Place1 == string::npos) << endl;
// 没有找到目标字符串就返回string::npos
char ch2[] = "666";
int Place2 = str1.find(ch2, 1, 2); // 从第一个字符开始查找自ch2地址起的2个字符元素"66"
cout << Place2 << endl; // string类中的find函数返回值为整型变量不同于vector返回的迭代器类型
// 子字符串的提取
str2.clear();
str2 = str1.substr(3); // 3-end全部赋值给str2
cout << str2 << endl;
str3.clear();
str3 = str1.substr(3, 9); // 3-9全部赋值给str2
cout << str3 << endl;
// 字符串的大小转换
str2.clear();
str2 = toupper(str1[8]); // 小写转换用tolower
cout << str2 << endl;
// 字符大小调整函数resize()函数的用法
str4.resize(str1.size(), '6'); // 把str4调整成str1相同的大小不足的补'6',多余的去掉
cout << str4 << endl;
// 字符增补函数append()函数的用法
str2.append(ch2);
cout << str2 << endl;
str2.clear();
str2.append(str1, 4, 3); // 将str1中4-7个字符添加到str2字符串的后面
cout << str2 << endl;
// 快速显示最两端的字符
cout << str1.back() << endl;
cout << str1.front() << endl;
// 快速向最末端插入/删除字符
str3.push_back('a');
str3.pop_back();
cout << str3 << endl;
// 反向遍历字符
string::reverse_iterator riter = str1.rbegin();
for (; riter != str1.rend(); riter++)
{
cout << *riter << " ";
}
cout << endl;
// 字符串的替换
str5.replace(str5.begin(), str5.end(), str1.c_str(), 5);
cout << str5 << endl;
str2.clear();
str2.replace(str2.begin(), str2.end(), str1);
cout << str2 << endl;
// 字符串的比较
cout << str1.compare(0, 4, str4) << endl;
cout << str1.compare(1, 3, str4, 0, 2) << endl;
cout << str1.compare(1, 3, ch2, 3) << endl; // ch2是字符数组的起始地址,也是被比较字符串的第一个字符的地址
// 1代表>;-1代表<;0代表==
// C++风格的字符串与C风格的字符型数组之间的练习
cout << *(str1.c_str() + 7) << endl;
// 字符串反转函数
reverse(str1.begin(), str1.end()); // 注意反转字符串函数的用法,参数是迭代器,无调用对象
cout << str1 << endl;
// 反向查找函数rfind()的使用
string str6 = "6699";
int ReversePlace = str6.rfind('6'); // 反向查找第一个'6'
int PositivePlace = str6.find('6'); // 正向查找第一个'6'
cout << "ReversePlace = " << ReversePlace << endl;
cout << "PositivePlace = " << PositivePlace << endl;
}