普-难度站外题求助
  • 板块学术版
  • 楼主dsfgsdf
  • 当前回复16
  • 已保存回复16
  • 发布时间2023/9/29 21:38
  • 上次更新2023/11/2 17:05:34
查看原帖
普-难度站外题求助
1003851
dsfgsdf楼主2023/9/29 21:38

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;

}
2023/9/29 21:38
加载中...