提交时间:2022-10-30 21:23:19

运行 ID: 324

#include <bits/stdc++.h>//头文件 using namespace std;//命名空间 int p1, p2, p3;//三个参数 //展开函数,参数是两端字符 void printstr(char l, char r) { //若l不小于r或者两端字符类型不同 if (l >= r || (isdigit(l) && isalpha(r)) || (isdigit(r) && isalpha(r))) { //原样输出'-' printf("-", l, r); } //若l和r只差1 else if (l + 1 == r) { //省略'-' return ; } else//否则,开始展开 { if (isalpha(l))//如果是字母 { //根据p1改变大小写 if (p1 == 1) { l = tolower(l); r = tolower(r); } else if (p1 == 2) { l = toupper(l); r = toupper(r); } } if (p3 == 1)//判断正序倒序 { //正序 for (char i = l + 1; i < r; i++) { //输出p2个 for (int n = 0; n < p2; n++) { //判断p3情况 printf("%c", (p1 == 3)? '*': i); } } } else if (p3 == 2)//倒序 { for (char i = r - 1; i > l; i--) { //输出p2个 for (int n = 0; n < p2; n++) { //判断p3情况 printf("%c", (p1 == 3)? '*': i); } } } } } int main(int argc, char const *argv[])//主函数 { scanf("%d%d%d", &p1, &p2, &p3);//输入参数 string str; cin>>str;//读入字符串 char l;int start; //特判开头的'-' for (int i = 0; i < str.size(); i++) { if (str[i] == '-') { printf("-"); } else { start = i; break; } } //对于剩余字符 for (int i = start; i < str.size(); i++) { //不是'-'时 if (str[i] != '-') { printf("%c", str[i]); } //是'-'但是是最后一位/上\下一位也是'-' else if (i + 1 == str.size() || (i + 1 != str.size() && str[i + 1] == '-') || (l == '-')) { printf("-"); } else//否则可以展开 { printstr(l, str[i + 1]); } //记录上一位字符 l = str[i]; } return 0; }