CODE[VS] 1165 字符串的展开 || P1098 字符串的展开

题目描述 Description

【问题描述】
在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输
入的字符串中,含有类似于“d-h”或“4-8”的子串,我们就把它当作一种简写,输出时,用连续
递增的字母或数字串替代其中的减号,即,将上面两个子串分别输出为“defgh”和“45678”。在
本题中,我们通过增加一些参数的设置,使字符串的展开更为灵活。具体约定如下:
(1)遇到下面的情况需要做字符串的展开:在输入的字符串中,出现了减号“-”,减号两侧
同为小写字母或同为数字,且按照ASCII 码的顺序,减号右边的字符严格大于左边的字符。
(2)参数p1:展开方式。p1=1 时,对于字母子串,填充小写字母;p1=2 时,对于字母子串,

填充大写字母。这两种情况下数字子串的填充方式相同。p1=3 时,不论是字母子串还是数字子串,
都用与要填充的字母个数相同的星号“*”来填充。
(3)参数p2:填充字符的重复个数。p2=k 表示同一个字符要连续填充k 个。例如,当p2=3
时,子串“d-h”应扩展为“deeefffgggh”。减号两侧的字符不变。
(4)参数p3:是否改为逆序:p3=1 表示维持原有顺序,p3=2 表示采用逆序输出,注意这时
仍然不包括减号两端的字符。例如当p1=1、p2=2、p3=2 时,子串“d-h”应扩展为“dggffeeh”。
(5)如果减号右边的字符恰好是左边字符的后继,只删除中间的减号,例如:“d-e”应输出
为“de”,“3-4”应输出为“34”。如果减号右边的字符按照ASCII码的顺序小于或等于左边字符,
输出时,要保留中间的减号,例如:“d-d”应输出为“d-d”,“3-1”应输出为“3-1”。

 

输入描述 Input Description

第 1 行为用空格隔开的3 个正整数,依次表示参数p1,p2,p3。
第 2 行为一行字符串,仅由数字、小写字母和减号“-”组成。行首和行末均无空格。

输出描述 Output Description

输出只有一行,为展开后的字符串。

 

样例输入 Sample Input

【输入输出样例1】
1 2 1
abcs-w1234-9s-4zz

【输入输出样例2】
2 3 2
a-d-d

【输入输出样例3】
3 4 2
di-jkstra2-6

样例输出 Sample Output

【输入输出样例1】

abcsttuuvvw1234556677889s-4zz

【输入输出样例2】

aCCCBBBd-d

【输入输出样例3】

dijkstra2************6

 

数据范围及提示 Data Size & Hint

【限制】
40%的数据满足:字符串长度不超过5
100%的数据满足:1<=p1<=3, 1<=p2<=8, 1<=p3<=2。字符串长度不超过100

 

zhei就是一个模拟,字符串。

 

但模拟的思路,过程有很多种。

 

就是要注意把所有的特殊情况都考虑全面了吧。

 

ac代码:

 

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<cstring>
 6 using namespace std;
 7 int x,y,z;
 8 char c[105];
 9 int main()
10 {
11     scanf("%d%d%d",&x,&y,&z);
12     cin>>c+1;
13     int l=strlen(c+1);
14     for(int i=1; i<=l; i++)
15     {
16         if(c[i]=='-'&&i==1)
17         {
18             printf("%c",c[i]);
19             continue;
20         }
21         if(c[i]=='-'&&c[i+1]=='-'||c[i]=='-'&&c[i-1]=='-')
22         {
23             printf("-");
24             continue;
25         }
26         if(c[i]=='-'&&i==l)
27         {
28             printf("-");
29             return 0;
30         }
31         if(c[i]!='-')
32             printf("%c",c[i]);
33         else
34         {
35             if((c[i-1]>=48&&c[i-1]<=57&&c[i+1]>=97)||(c[i-1]>=97&&c[i+1]>=48&&c[i+1]<=57))
36                 printf("%c",c[i]);
37             else
38             {
39                 if(c[i+1]==c[i-1]+1) continue;
40                 if(c[i-1]>=c[i+1])
41                     printf("%c",c[i]);
42                 if(x==1&&z==1)
43                     for(int j=c[i-1]+1; j<c[i+1]; j++)
44                         for(int k=1; k<=y; k++)
45                             printf("%c",j);
46                 if(x==1&&z==2)
47                     for(int j=c[i+1]; j>c[i-1]+1; j--)
48                         for(int k=1; k<=y; k++)
49                             printf("%c",j);
50                 if(x==2&&z==1)
51                 {
52                     if(c[i-1]>=48&&c[i-1]<=57)
53                         for(int j=c[i-1]+1; j<c[i+1]; j++)
54                             for(int k=1; k<=y; k++)
55                                 printf("%c",j);
56                     else
57                     {
58                         for(int j=c[i-1]+1-32; j<c[i+1]-32; j++)
59                             for(int k=1; k<=y; k++)
60                                 printf("%c",j);
61                     }
62                 }
63                 if(x==2&&z==2)
64                 {
65                     if(c[i-1]>=48&&c[i-1]<=57)
66                         for(int j=c[i+1]-1; j>c[i-1]; j--)
67                             for(int k=1; k<=y; k++)
68                                 printf("%c",j);
69                     else
70                     {
71                         for(int j=c[i+1]-32-1; j>c[i-1]-32; j--)
72                             for(int k=1; k<=y; k++)
73                                 printf("%c",j);
74                     }
75                 }
76                 if(x==3)
77                     for(int j=c[i-1]+1-32; j<c[i+1]-32; j++)
78                         for(int k=1; k<=y; k++)
79                             printf("*");
80             }
81         }
82     }
83     return 0;
84 }

 

 

 

 

posted @ 2018-06-11 14:43  孟东行#  阅读(448)  评论(0编辑  收藏  举报