string 类的常见用法
#include <bits/stdc++.h>
using namespace std;
int main() {
string s; // vector<char> s
cin >> s;
getline(cin, s);
cout << s << endl;
for (char c : s) {
cout << c;
}
cout << endl;
cout << s.size() << endl;
s.push_back('S');
cout << s << endl;
s.pop_back();
cout << s << endl;
cout << s.front() << endl;
cout << s.back() << endl;
s += "OK";
cout << s << endl;
sort(s.begin(), s.end());
cout << s << endl;
reverse(s.begin(), s.end());
cout << s << endl;
s.insert(s.begin() + 2, 'K'); // 插入字符,注意用迭代器定位
cout << s << endl;
s.erase(s.begin() + 3);
cout << s << endl;
s.clear(); // 清空
cout << "size = " << s.size() << endl;
cout << "empty = " << s.empty() << endl; // 判断是否为空
cout << s.substr(6, 5) << endl; // 返回子串,注意用下标定位
int n = 12345;
string s = to_string(n); // 整型转字符串
cout << s << endl;
double db = 12.345;
s = to_string(db); // 浮点型转字符串
cout << s << endl;
s.pop_back();
s.pop_back();
s.pop_back();
s.erase(s.begin() + 3, s.begin() + 3 + 3); // 删除
cout << s << endl;
string s = "12";
int n = stoi(s); // 字符串转整型,注意 atoi 已失效
cout << n * n << endl;
string s = "12.345";
double db = stod(s); // 字符串转浮点型
cout << db << endl;
string s = "hello world"; //llo -> 110
for (int i = 0; i < s.size(); i++) {
if (s[i] == 'w') {
cout << "find" << endl;
break;
}
}
// Box::get()
if (s.find("werewrt") == string::npos) { // 查找
cout << "not find" << endl;
} else {
cout << "find" << endl;
}
s.erase(s.begin() + 2, s.begin() + 2 + 3); // 删除
cout << s << endl;
s.insert(2, "110"); // 插入字符串,注意用下标索引
cout << s << endl;
s.replace(2, 3, "110110"); // 替换
cout << s << endl;
// 字符数组转换 string类
char arr[6] = {'h', 'e', 'l', 'l', 'o', '\0'} ;
string s(arr);
string s = arr;
cout << s << endl;
// string 类转换 字符数组
string s = "hello world";
char arr[100];
memset(arr, 0, sizeof(arr));
strcpy(arr, s.c_str()); // 返回以'\0'结尾的字符数组,优先使用
strcpy(arr, s.data()); // 返回 字符数组,不添加 '\0'
cout << arr << endl;
return 0;
}
## vector 向量 的 常见用法
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> vec(n);
for (int i = 0; i < n; i++) {
cin >> vec[i];
}
sort(vec.begin(), vec.end());
vec.insert(vec.begin() + 2, 1000);
vector<int> vec1 = {10, 20, 30, 40, 50};
vector<int> vec2 = {100, 200, 300};
for (auto num : vec1) {
cout << num << " ";
}
cout << endl;
cout << vec1.size() << endl;
for (auto num : vec2) {
cout << num << " ";
}
cout << endl;
cout << vec2.size() << endl;
vec1.clear();
vec.erase(vec.begin() + 3); // 删除,迭代器定位
vec.erase(find(vec.begin(), vec.end(), 30)); // 查找位置并删除
for (int i = 0; i < n; i++) {
cout << vec[i] << " ";
}
// 数组转换成向量
int arr[] = {10, 20, 50, 40, 30};
vector<int> vec(arr, arr + 5);
for (auto num : vec) {
cout << num << " ";
}
cout << endl;
vec.push_back(100); // 添加末尾元素
for (auto num : vec) {
cout << num << " ";
}
cout << endl;
vec.pop_back(); // 删除末尾元素
sort(vec.begin(), vec.end()); // 排序
for (auto num : vec) {
cout << num << " ";
}
cout << endl;
reverse(vec.begin(), vec.end()); // 反转
for (auto num : vec) {
cout << num << " ";
}
cout << endl;
cout << vec.front() << endl; // 起始元素
cout << vec.back() << endl; // 末尾元素
vec.clear(); // 清空
cout << "size = " << vec.size() << endl; // 返回个数
cout << "empty = " << vec.empty() << endl; // 判断为空
// 向量转换为数组
vector<int> vec = {10, 20, 30, 40, 50};
int arr[10];
memcpy(arr, &vec[0], vec.size() * sizeof(int)) ;
for (int i = 0; i < vec.size(); i++) {
cout << arr[i] << " ";
}
// TDP1104 读取方式
int num;
vector<int> nums;
while (cin >> num) nums.push_back(num);
// TDP1109 读取方式
int num, target;
vector<int> nums;
while (cin >> num) {
nums.push_back(num);
char ch = getchar();
if (ch == '\n') break;
}
cin >> target;
// 二维向量用法
vector<vector<int>> vecvec;
vector<int> vec = {10, 20, 30};
vecvec.push_back(vec);
vecvec.push_back(vec);
vecvec.push_back(vec);
for (auto vec : vecvec) {
for (auto num : vec) {
cout << num << " ";
}
cout << endl;
}
return 0;
}
## 简洁高效的 string 类
```cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
string s1, s2;
cin >> s1 >> s2;
// 字符串拼接
cout << s1 + s2 << endl;
// 字符串复制
s1 = s2;
cout << s1 << endl;
// 字符串比较
cout << (s1 < s2 ? "<" : ">=") << endl;
return 0;
}