C++字符串展开:灵活处理字符替换与排序
C++字符串展开:灵活处理字符替换与排序
本文提供了一个C++解决方案,用于根据特定规则展开字符串。程序接收一个字符串和三个参数:
- p1: 控制字符替换方式 (1: 小写字母,2: 大写字母,3: 星号)* p2: 控制字符重复次数* p3: 控制输出顺序 (1: 正序,2: 逆序)
程序将识别字符串中的'-'符号,并根据其两侧的字符进行展开。
以下是完整的C++代码:cpp#include
using namespace std;
string expandString(int p1, int p2, int p3, string str) { string expandedStr; int n = str.length();
for (int i = 0; i < n; i++) { if (str[i] == '-') { // 判断减号两边的字符是否满足展开条件 if ((i > 0 && i < n - 1) && ((isdigit(str[i - 1]) && isdigit(str[i + 1])) || (islower(str[i - 1]) && islower(str[i + 1])))) { char left = str[i - 1]; char right = str[i + 1];
if (left < right) { // 按照ASCII码顺序展开字符 if (p3 == 2) { for (char ch = right - 1; ch > left; ch--) { if (p1 == 1) { // 小写字母子串,填充小写字母 for (int j = 0; j < p2; j++) { expandedStr += ch; } } else if (p1 == 2) { // 小写字母子串,填充大写字母 for (int j = 0; j < p2; j++) { expandedStr += toupper(ch); } } else if (p1 == 3) { // 不论字母子串还是数字子串,填充星号 for (int j = 0; j < p2; j++) { expandedStr += '*'; } } } } else { for (char ch = left + 1; ch < right; ch++) { if (p1 == 1) { // 小写字母子串,填充小写字母 for (int j = 0; j < p2; j++) { expandedStr += ch; } } else if (p1 == 2) { // 小写字母子串,填充大写字母 for (int j = 0; j < p2; j++) { expandedStr += toupper(ch); } } else if (p1 == 3) { // 不论字母子串还是数字子串,填充星号 for (int j = 0; j < p2; j++) { expandedStr += '*'; } } } } } else if (left == right) { // 相邻字符相等,只保留减号 expandedStr += '-'; } } else { // 不满足展开条件,直接输出减号 expandedStr += '-'; } } else { // 非减号字符,直接输出 expandedStr += str[i]; } }
return expandedStr;}
int main() { int p1, p2, p3; string str; cin >> p1 >> p2 >> p3; cin.ignore(); getline(cin, str);
string expandedStr = expandString(p1, p2, p3, str); cout << expandedStr << endl;
return 0;}
示例:
输入:2 3 2a-d-d
输出:DDDCCCB
这个程序可以帮助你根据自定义规则灵活地展开字符串。例如,你可以用它来:
- 生成特定格式的字符串,如密码或序列号* 处理配置文件中的占位符* 解析数据格式,如CSV文件
希望这篇文章对你有帮助!
原文地址: http://www.cveoy.top/t/topic/YNV 著作权归作者所有。请勿转载和采集!