给定一个十进制正整数n(0<n<1000000000),每个数位上数字均不为0。n的位数为m。
现在从m位中删除k位(0<k<m),求生成的新整数最小为多少?
例如: n=9128456,k=2,则生成的新整数最小为12456。
第一行t, 表示有t组数据;
接下来t行,每一行表示一组测试数据,每组测试数据包含两个数字n,k。
t行,每行一个数字,表示从n中删除k位后得到的最小整数。
2 9128456 2 1444 3
12456 1
可采用字符串保存整数值,在 C++ 中,std::string 是一个用于处理字符串的类。
1. 头文件
使用 std::string 需要包含 <string> 头文件。
#include <string> #include <iostream> // 用于输入输出 using namespace std; // 可选,避免每次写 std::
2. 字符串的初始化
string s1; // 默认初始化,空字符串 ""
string s2("Hello"); // 用 C 风格字符串初始化
string s3 = "World"; // 赋值初始化3. 字符串的基本操作
(1) 访问字符:使用 `[]` 或 `at()` 访问单个字符:
string s = "Hello"; cout << s[0]; // 'H'(不检查越界) cout << s.at(1); // 'e'(越界会抛出 std::out_of_range)
(2) 获取字符串长度
string s = "Hello"; cout << s.size(); // 5 cout << s.length(); // 5(与 size() 相同) cout << s.empty(); // false(如果字符串为空返回 true)
(3) 字符串比较:使用 ==, !=, <, >, <=, >=:
string a = "abc"; string b = "def"; if (a < b) cout << "a < b"; // 按字典序比较 if(a[0] > a[1] cout<<1<<endl;
(4) 子字符串操作:substr(pos, len):提取子串
string s = "Hello World"; string sub = s.substr(6, 5); // sub = "World"
(5) 删除:erase(pos, len):删除子串
s.erase(5, 3); // s = "Hello C++"
4. 字符串遍历:
(1) 使用下标遍历
for (size_t i = 0; i < s.size(); i++) {
cout << s[i];
}(2) 使用迭代器遍历
for (auto it = s.begin(); it != s.end(); it++) {
cout << *it;
}
总结
- std::string 比 C 风格字符串更安全、更易用。
- 支持动态扩容,无需手动管理内存。
- 提供了丰富的成员函数(find, substr, replace, append 等)。
- 适用于大多数字符串操作场景。