哪里的问题??

P1098 [NOIP2007 提高组] 字符串的展开

@ sz_mane 看看
by ly_magician @ 2024-01-23 21:55:53


哪位神犇看看(求求了)
by ly_magician @ 2024-01-23 21:59:04


提供一个比较简洁的写法QAQ 这道题细节比较多自己看吧~~其实就是不想调别人的代码比较懒~~ ```cpp #include<iostream> #include<cstdio> using namespace std; int p1, p2, p3;//三个参数 //isalpha(x)是否是字母,isdigit(x)是否是数字 //tolower(x)改成小写,toupper(x)改成大写 //展开函数,参数是两端字符 void printstr(char l, char r){ /*若l不小于r或者两端字符类型不同,原样输出'-'*/ if (l >= r || ( isdigit(l) && isalpha(r) ) || ( isdigit(r) && isalpha(r) ) ) printf("-"); else if (l + 1 == r) return ;/*若l和r只差1,省略'-'*/ else{ if(isalpha(l) && p1 == 1)l = tolower(l),r = tolower(r); if(isalpha(l) && p1 == 2)l = toupper(l),r = toupper(r); if(p3 == 1){//正序 for(char i = l+1;i < r;i++) for(int n = 0;n < p2;n++) printf("%c",(p1 == 3)?'*':i ); } if (p3 == 2){//倒序 for(char i = r-1;i > l;i--) for(int n = 0;n < p2;n++) printf("%c",(p1 == 3)?'*':i ); } } return ; } int main(){ scanf("%d%d%d",&p1,&p2,&p3); string str; cin>>str; char lst;int st;//上一位字符;开头非'-'字符位置 for(int i = 0;i < str.size();i++){ if(str[i] == '-')printf("-"); else {st = i;break;} } for(int i = st;i < str.size();i++){ if(str[i] != '-') printf("%c", str[i]); else if( (i + 1 == str.size()) || (i + 1 != str.size() && str[i + 1] == '-') || (lst == '-')) printf("-");//是'-'但是是最后一位/上\下一位也是'-' else printstr(lst, str[i + 1]); lst = str[i]; } return 0; } ```
by 帝都_henry26268 @ 2024-01-24 16:48:17


@[ly202303](/user/1185854)
by 帝都_henry26268 @ 2024-01-24 16:48:34


|