C++字符串展开:灵活处理字符替换与排序

本文提供了一个C++解决方案,用于根据特定规则展开字符串。程序接收一个字符串和三个参数:

  • p1: 控制字符替换方式 (1: 小写字母,2: 大写字母,3: 星号)* p2: 控制字符重复次数* p3: 控制输出顺序 (1: 正序,2: 逆序)

程序将识别字符串中的'-'符号,并根据其两侧的字符进行展开。

以下是完整的C++代码:cpp#include #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文件

希望这篇文章对你有帮助!

C++字符串展开:灵活处理字符替换与排序

原文地址: http://www.cveoy.top/t/topic/YNV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录