WA求助

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

```c #include<bits/stdc++.h> using namespace std; int p1,p2,p3; string s1,s2; //判定条件严格按照题目要求两端都是小写字母或数字 bool f2(char ch){if(ch>='a'&&ch<='z') return 1; return 0;}//f2()函数判断是否是小写字母 bool f3(char ch){if(ch>='0'&&ch<='9') return 1; return 0;}//f3()函数判断是否是 int check(char l,char r){ if(f2(l)&&f2(r)||f3(l)&&f3(r)){ if(l+1 == r){//3-4 return 1; }else if(l>=r){//3-1 return 2; }else{ return 3; } }else{//a-3 return 2; } } string f(char l,char r){ string s3; bool flag =false; if(f2(l)) flag =1; for(char i=l+1;i<r;i++){ for(int j=1;j<=p2;j++){ if(flag ==1){ if(p1==1) s3+=i; else if(p1==2) s3+=i-'a'+'A'; else s3+='*'; }else{ if(p1 == 3) s3+='*';else s3+=i; } } } return s3; } int main(){ cin>>p1>>p2>>p3>>s1; int len = s1.size(); for(int i=0;i<len;i++){ if(s1[i]=='-'){ int k =check(s1[i-1],s1[i+1]);//判定三种输出情况 if(k==1) continue;//3-4 忽略'-'的情况 34 else if(k==2) cout<<s1[i];//3-3 3-1 a-3 打印'-' else{ s2=f(s1[i-1],s1[i+1]);//3-9获取展开的字符串 if(p3==1){//判断输出顺序 cout<<s2;//正序 }else{ for(int j=s2.size()-1;j>=0;j--)//逆序 cout<<s2[j]; } s2.clear();//对临时的字符串变量清零 } }else{ cout <<s1[i]; } } return 0; } ```
by zhang13095534103 @ 2023-12-17 19:07:22


|