专门做签到的网站,长春seo全网营销,软件技术有限公司,厦门外贸网站建设报价表35:字符串的展开 查看提交统计提问总时间限制: 1000ms内存限制: 65536kB描述在初赛普及组的“阅读程序写结果”的问题中#xff0c;我们曾给出一个字符串展开的例子#xff1a;如果在输入的字符串中#xff0c;含有类似于“d-h”或者“4-8”的字串#xff0c;我们就把它当作… 35:字符串的展开 查看提交统计提问 总时间限制: 1000ms内存限制: 65536kB描述 在初赛普及组的“阅读程序写结果”的问题中我们曾给出一个字符串展开的例子如果在输入的字符串中含有类似于“d-h”或者“4-8”的字串我们就把它当作一种简写输出时用连续递增的字母获数字串替代其中的减号即将上面两个子串分别输出为“defgh”和“45678”。在本题中我们通过增加一些参数的设置使字符串的展开更为灵活。具体约定如下 (1) 遇到下面的情况需要做字符串的展开在输入的字符串中出现了减号“-”减号两侧同为小写字母或同为数字且按照ASCII码的顺序减号右边的字符严格大于左边的字符。 (2) 参数p1展开方式。p11时对于字母子串填充小写字母p12时对于字母子串填充大写字母。这两种情况下数字子串的填充方式相同。p13时不论是字母子串还是数字字串都用与要填充的字母个数相同的星号“*”来填充。 (3) 参数p2填充字符的重复个数。p2k表示同一个字符要连续填充k个。例如当p23时子串“d-h”应扩展为“deeefffgggh”。减号两边的字符不变。 (4) 参数p3是否改为逆序p31表示维持原来顺序p32表示采用逆序输出注意这时候仍然不包括减号两端的字符。例如当p11、p22、p32时子串“d-h”应扩展为“dggffeeh”。 (5) 如果减号右边的字符恰好是左边字符的后继只删除中间的减号例如“d-e”应输出为“de”“3-4”应输出为“34”。如果减号右边的字符按照ASCII码的顺序小于或等于左边字符输出时要保留中间的减号例如“d-d”应输出为“d-d”“3-1”应输出为“3-1”。 输入包括两行第1行为用空格隔开的3个正整数一次表示参数p1p2p3。第2行为一行字符串仅由数字、小写字母和减号“-”组成。行首和行末均无空格。40%的数据满足字符串长度不超过5100%的数据满足1p131p281p32。字符串长度不超过100。输出只有一行为展开后的字符串。样例输入 样例 #1
1 2 1
abcs-w1234-9s-4zz样例 #2
2 3 2
a-d-d样例 #3
3 4 2
di-jkstra2-6样例输出 样例 #1
abcsttuuvvw1234556677889s-4zz样例 #2
aCCCBBBd-d样例 #3
dijkstra2************6 来源NOIP2007复赛 提高组 第二题 1 #includeiostream2 #includecstring3 #includecstdio4 #includecmath5 using namespace std;6 int z0;7 char a[100001];8 int main()9 {10 int p1,p2,p3;11 cinp1p2p3;12 scanf(%s,a);13 int nstrlen(a);14 for(int i0;in;i)15 {16 if(a[i]-a[i-1]a[i1](((a[i-1]65a[i-1]90)(a[i1]65a[i1]90))||((a[i-1]90a[i-1]122)(a[i1]90a[i1]122))||((a[i-1]48a[i-1]57)(a[i1]48a[i1]57))))//找到简写的字符串 17 {18 int la[i-1];//左侧字符的ascll码表19 int ra[i1];//右侧字符的ascll码表20 if(p31)21 {22 for(int jl;jr;j)23 {24 for(int k1;kp2;k)25 {26 if(jl||jr)27 {28 break;29 //cout(char)j;//边界值 30 //break;31 }32 else33 {34 if(p13)35 {36 cout*;37 }38 else if(p11)//小写字母 39 {40 if(j65j90)41 {42 a[j]a[j]32;43 coutchar(j32);44 continue;45 }46 else coutchar(j);47 48 }49 else if(p12)50 {51 if(j90j122)52 {53 a[j]a[j]-32;54 coutchar(j-32);55 }56 else coutchar(j);57 }58 }59 }60 61 }62 } //顺序输出63 else if(p32)64 {65 for(int jr;jl;j--)66 {67 for(int k1;kp2;k)68 {69 if(jl||jr)70 {71 break;72 //cout(char)j;//边界值 73 //break;74 }75 else76 {77 if(p13)78 {79 cout*;80 }81 else if(p11)//小写字母 82 {83 if(j65j90)84 {85 a[j]a[j]32;86 coutchar(j32);87 continue;88 }89 else coutchar(j);90 91 }92 else if(p12)93 {94 if(j90j122)95 {96 a[j]a[j]-32;97 coutchar(j-32);98 }99 else coutchar(j);
100 }
101 }
102 }
103
104 }
105 } //逆序输出
106
107 }
108 else
109 {
110 couta[i];
111 }
112 }
113 return 0;
114 } 转载于:https://www.cnblogs.com/zwfymqz/p/6522790.html