rt,难度普-,是p1098的弱化版。
题目描述
如果在输入的字符串中,含有类似于 d-h 或者 4-8 的字符子串,我们就把它当作一种简写,输出时,用连续递增的字母或数字串替代其中的减号,即将上面两个子串分别输出为 defgh 和 45678。具体约定如下:
(1) 遇到下面的情况需要对字符串进行展开:在输入的字符串中,出现了减号 - ,减号两侧同为小写字母或同为数字,且按照 ASCIIASCII 码的顺序,减号右边的字符严格大于左边的字符。
(2) 如果减号右边的字符恰好是左边字符的后继,只删除中间的减号,例如:d-e 应输出为 de,3-4 应输出为 34。如果减号右边的字符按照 ASCIIASCII 码的顺序小于或等于左边字符,输出时,要保留中间的减号,例如:d-d 应输出为 d-d ,3-1 应输出为 3-1。
输入
输入文件仅有一行包含一个长度不超过 200200 的字符串,仅由数字、小写字母和减号 - 组成。行首和行末均无空格。
输出
输出文件仅有一行,为展开后的字符串。
输入数据 1
abcs-w-y1234-9s-4zz
输出数据 1
abcstuvwxy123456789s-4zz
Source
字符串模拟
my 60pts code:
#include<bits/stdc++.h>
using namespace std;
int main(){
string a;
getline(cin,a);
for(int i=0;i<a.length();i++){
if(a[i]=='-'){
if(a[i-1]>='a'&&a[i-1]<='z'){
if(a[i+1]>='a'&&a[i+1]<='z'&&int(a[i+1])>int(a[i-1])){
for(int k=int(a[i-1])+1;k<int(a[i+1]);k++){
cout<<char(k);
}
continue;
}
else {
cout<<'-';
continue;
}
}
if(int(a[i-1])>=48&&int(a[i-1])<=57){
if(int(a[i+1])>=48&&int(a[i+1])<=57&&(a[i+1]-'0')>int(a[i-1]-'0')){
for(int l=int(a[i-1])+1;l<int(a[i+1]);l++){
cout<<char(l);
}
}
else {
cout<<"-";
continue;
}
}
}
else cout<<a[i];
}
return 0;
}