首页 > 其他分享 >字符串的展开

字符串的展开

时间:2023-03-09 17:56:28浏览次数:33  
标签:p2 p3 p1 子串 减号 字符串 展开

字符串的展开

在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:

如果在输入的字符串中,含有类似于 d-h 或 4-8 的子串,我们就把它当作一种简写,输出时,用连续递增的字母或数字串替代其中的减号,即,将上面两个子串分别输出为 defgh 和 45678。

在本题中,我们通过增加一些参数的设置,使字符串的展开更为灵活。具体约定如下:

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

第 1 行为用空格隔开的 3 个正整数,依次表示参数 p1,p2,p3。

第 2 行为一行字符串,仅由数字、小写字母和减号 - 组成。

行首和行末均无空格。

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

数据范围
1≤p1≤3,
1≤p2≤8,
1≤p3≤2,
字符串长度不超过 100。

输入样例:
1 2 1
abcs-w1234-9s-4zz
输出样例:
abcsttuuvvw1234556677889s-4zz

代码

点击查看代码
#include<iostream>
#include<algorithm>
using namespace std;

int main(){
    int p1,p2,p3;
    cin >> p1 >> p2 >> p3;
    string t = "";
    string s;
    cin >> s;
    for(int i = 0; i <= s.size() - 1; i ++ ){
        if(i != s.size() - 2 && s[i + 1] == '-'){
            if(isalpha(s[i]) && isalpha(s[i + 2]) && s[i] < s[i + 2]){
                t += s[i];
                if(p3 == 1){
                    for(char j = s[i] + 1; j < s[i + 2]; j ++){
                        for(int k = 1; k <= p2; k ++ ){
                            if(p1 == 1)t += tolower(j);
                            else if(p1 == 2)t += toupper(j);
                            else if(p1 == 3)t += '*';
                        }
                    }
                }
                else{
                    for(char j = s[i + 2] - 1; j > s[i]; j --){
                        for(int k = 1; k <= p2; k ++ ){
                            if(p1 == 1)t += tolower(j);
                            else if(p1 == 2)t += toupper(j);
                            else if(p1 == 3)t += '*';
                        }
                    }
                }
                i ++ ;
            }
            else if(isdigit(s[i]) && isdigit(s[i + 2]) && s[i] < s[i + 2]){
                t += s[i];
                if(p3 == 1){
                    for(char j = s[i] + 1; j < s[i + 2]; j ++){
                        for(int k = 1; k <= p2; k ++ ){
                            if(p1 == 3)t += '*';
                            else t += j;
                        }
                    }
                }
                else{
                    for(char j = s[i + 2] - 1; j > s[i]; j --){
                        for(int k = 1; k <= p2; k ++ ){
                            if(p1 == 3)t += '*';
                            else t += j;
                        }
                    }
                }
                i ++ ;
            }
            else t += s[i];
        }
        else t += s[i];
    }
    cout << t;
}

纯模拟,注意审题,翻转的是展开串而不是整个串

标签:p2,p3,p1,子串,减号,字符串,展开
From: https://www.cnblogs.com/J-12045/p/17199431.html

相关文章

  • shell 脚本判断指定字符串是否存在
    如我要对my.cnf文件进行参数新增首先判断my.cnf中,是否已经存在要添加的参数,如果没有则添加,有则跳过第一种:#!/bin/shecho"开始修改my.cnf"grep-w"group_concat_......
  • js字符串详解(一):什么是字符串,内置对象以及包装类型对象
    1.什么是:多个字符组成的只读字符数组   vs数组:下标i          length          slice() concat   不同:......
  • js字符串详解(二):字符串API
    所有字符串API都无权修改原字符串,只能返回新字符串!转换 1.大小写转换:将字符串中所有英文字母转为统一的大小写   何时:只要不区分大小写时,都要先转为一致的大......
  • 算法训练Day9| LeetCode28. 找出字符串中第一个匹配项的下标(KMP算法)
    28. 找出字符串中第一个匹配项的下标给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从0开始)。如果......
  • 获取时间字符串
    importtimeimportdatetimedefget_time_str():#定义文件名,年月日时分秒随机数#fn=time.strftime('%Y%m%d%H%M%S')#fn=fn+'_%d'%random.r......
  • Go字符串方法
    字符串常用方法都在strings包中高性能字符串拼接varbuilderstrings.Builderbuilder.WriteString("用户名")builder.WriteByte(97)str:=builder.String()fmt.......
  • Python基本语法 -- 变量、运算、字符串
    对象要存储一个对象需要包括id(标识,对象一旦创建id永不改变,在内存中的位置)、type(类型,当前对象的类型,决定其功能)和value(值,存储的具体值)根据其值能否更改进行分类,可分为可......
  • 字符串查询【华东师范大学考研机试题】
    字符串查询给你单词S和Q个询问。每次询问,你会得到正整数A,B,C和D。我们令单词X由S的第A到B个字母组成,单词Y由S的第C到D个字母组成。你需要回答......
  • 字符串专题
    字符串前言假期的时候刷了点字符串的专题,感觉板子变得更加普适和完善了KMPkmp算法实际上就是找最长公共前后缀,之前一直都是用的acwing的板子,根据董晓算法的板子和自己......
  • 16进制字符串 转为 字节
    importbinascii#16进制字符串转为字节v1="4E2918885FD98109869D14E0231A0BF4""""bs=bytearray()#[]foriinrange(0,len(v1),2):item_hex=v1[......