字符串处理与基础算法实践
字符序列排序实现
给定一个仅包含小写字母的字符串,要求将其字符按照字典序重新排列后输出。利用 C++ 标准模板库中的 sort 算法可高效完成此任务。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string input;
while (cin >> input) {
sort(input.begin(), input.end());
cout << input << endl;
}
return 0;
}
该方法通过调用 sort() 函数对字符串区间进行升序排列,适用于所有可比较类型的序列。
回文串判定逻辑
判断输入的字符串是否为回文,即正向和反向读取结果一致,如 "radar" 或 "level"。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string str;
while (cin >> str) {
string reversed = str;
reverse(reversed.begin(), reversed.end());
if (str == reversed)
cout << "Yes" << endl;
else
cout << "No" << endl;
}
return 0;
}
核心思路是将原字符串反转后与原始版本对比,借助 reverse() 实现翻转操作,简洁且易于理解。
提取字符串内的整数片段
从一个混合字符序列中识别并提取所有连续的数字部分,并去除前导零。例如,在字符串 "x012yz304a005b" 中应提取出 12、304 和 5。
#include <iostream>
#include <string>
#include <vector>
#include <cctype>
using namespace std;
int main() {
string line;
while (cin >> line) {
vector<string> integers;
string buffer;
for (char ch : line) {
if (isdigit(ch)) {
buffer += ch;
} else {
if (!buffer.empty()) {
// 去除前导零,保留末尾单个0
size_t start = 0;
while (start < buffer.size() - 1 && buffer[start] == '0')
++start;
integers.push_back(buffer.substr(start));
buffer.clear();
}
}
}
// 处理末尾残留数字
if (!buffer.empty()) {
size_t start = 0;
while (start < buffer.size() - 1 && buffer[start] == '0')
++start;
integers.push_back(buffer.substr(start));
}
cout << integers.size();
for (const auto& num : integers)
cout << " " << num;
cout << endl;
}
return 0;
}
使用 isdigit() 判断字符是否为数字,结合缓冲区机制逐段收集数值子串。去零策略确保不会误删全零情况下的有效值。