首页 > 学院 > 开发设计 > 正文

P1098 字符串展开

2019-11-14 11:04:53
字体:
来源:转载
供稿:网友

题目描述

在输入的字符串中,用连续递增的字母获数字串替代其中的减号。(1)出现了减号“-”,减号两侧同为小写字母或数字,且按照ASCII码的顺序,减号右边的字符大于左边的字符。(2) p1=1时,填充小写字母;p1=2时,填充大写字母。p1=3时,填充的字母个数相同的星号“*”。(3) p2=k表示同一个字符要连续填充k个。(4) p3=1表示维持原来顺序,p3=2表示采用逆序输出。(5) 如果减号右边的字符恰好是左边字符的后继,只删除中间的减号。如果减号右边的字符按照ASCII码的顺序小于或等于左边字符,输出时,要保留中间的减号。

样例输入

1 2 1abcs-w1234-9s-4zz

样例输出

abcsttuuvvw1234556677889s-4zz

思路

O(n)模拟,判断每种情况,按题意模拟。var a,b,c:longint; s:string;PRocedure main(p:longint);var i,j:longint;begin if s[p+1]<=s[p-1] then write('-') else if c=1 then for i:=(ord(s[p-1])+1) to (ord(s[p+1])-1) do for j:=1 to b do if a=3 then write('*') else if (s[p-1]>='a')and(s[p-1]<='z')and(a=2) then write(upcase(chr(i))) else write(chr(i)) else for i:=(ord(s[p+1])-1) downto (ord(s[p-1])+1) do for j:=1 to b do if a=3 then write('*') else if (s[p-1]>='a')and(s[p-1]<='z')and(a=2) then write(upcase(chr(i))) else write(chr(i));end;var i:longint;begin readln(a,b,c); readln(s); write(s[1]); for i:=2 to length(s)-1 do if s[i]<>'-' then write(s[i]) else if ((s[i-1]>='0')and(s[i-1]<='9')and(s[i+1]>='0')and(s[i+1]<='9'))or((s[i-1]>='a')and(s[i-1]<='z')and(s[i+1]<='a')and(s[i+1]>='z')) then main(i) else write(s[i]); writeln(s[length(s)]);end.
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表