在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有 类似于“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”。
输入格式
  输入包括两行:
  第1行为用空格隔开的3个正整数,一次表示参数p1,p2,p3。
  第2行为一行字符串,仅由数字、小写字母和减号“-”组成。行首和行末均无空格。
输出格式
  输出只有一行,为展开后的字符串。
输入输出样例1
输入 输出
1 2 1
abcs-w1234-9s-4zz abcsttuuvvw1234556677889s-4zz
输入输出样例2
输入 输出
2 3 2
a-d-d aCCCBBBd-d
输入输出样例3
输入 输出
3 4 2
di-jkstra2-6 dijkstra2
***********6
数据规模和约定
  40%的数据满足:字符串长度不超过5
  100%的数据满足:1<=p1<=3,1<=p2<=8,1<=p3<=2。字符串长度不超过100

#include<stdio.h>
#include<string.h>
#define N 100int p1,p2,p3;  //a:97 z:122 0:48 9:57
//A:65=97-32void fun(int a,int b)
{int i,j;if(a>=97) //大于a也就是为字母时{if(p3==1) //正序{for(i=a+1;i<b;i++){for(j=0;j<p2;j++) //p2中间重复个数{if(p1==1) //小写{printf("%c",i);}else if(p1==2) //大写{printf("%c",i-32);}else if(p1==3) //中间用*号代替{printf("*");}}}}else //倒序{for(i=b-1;i>=a+1;i--){for(j=0;j<p2;j++){if(p1==1){printf("%c",i);}else if(p1==2){printf("%c",i-32);}else if(p1==3){printf("*");}}}}}else //为数字时{if(p3==1){for(i=a+1;i<b;i++){for(j=0;j<p2;j++){if(p1==3){printf("*");}else{printf("%c",i);}}}}else{for(i=b-1;i>=a+1;i--){for(j=0;j<p2;j++){if(p1==3){printf("*");}else{printf("%c",i);}}}}}
}int main()
{int len,i;char str[N];scanf("%d%d%d",&p1,&p2,&p3);scanf("%s",&str);len=strlen(str);for(i=0;i<len;i++){if((i == len-1 || i == 0) && str[i] == '-'){  //处理第一个和最后一个字符 当它们=‘-’时printf("-");continue;}if((str[i-1] == '-' || str[i+1] == '-') && str[i] == '-'){ //处理连续的‘-’ printf("-");continue;}//满足条件时if(str[i]=='-' && (((str[i-1] >= 97 && str[i-1] <= 122) && (str[i+1] >= 97 && str[i+1] <= 122)) || ((str[i-1] >= 48 && str[i-1] <= 57) && (str[i+1] >= 48 && str[i+1] <= 57)))){if(str[i+1]<=str[i-1]) //小于时{printf("-");continue;}if(str[i+1] == str[i-1]+1) //相等时{continue;}fun((int)str[i-1],(int)str[i+1]); //函数处理}else{printf("%c",str[i]);}}printf("\n");return 0;
}

算法训练 字符串的展开c语言相关推荐

  1. 算法训练 字符串的展开

    ** 算法训练 字符串的展开 ** 在初赛普及组的"阅读程序写结果"的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有 类似于"d-h"或者& ...

  2. 蓝桥杯 ALGO-110 算法训练 字符串的展开

    在初赛普及组的"阅读程序写结果"的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于"d-h"或者"4-8"的字串,我 ...

  3. 算法训练 字符串编辑c语言

    算法训练 字符串编辑 时间限制:1.0s 内存限制:512.0MB 问题描述 从键盘输入一个字符串(长度<=40个字符),并以字符 '.' 结束.编辑功能有: 1 D:删除一个字符,命令的方式为 ...

  4. 算法训练 字符串编辑 java

    算法训练 字符串编辑 时间限制:1.0s 内存限制:512.0MB 问题描述 从键盘输入一个字符串(长度<=40个字符),并以字符 '.' 结束.编辑功能有: 1 D:删除一个字符,命令的方式为 ...

  5. 算法训练 字符串编辑(java)

    算法训练 字符串编辑 描述 从键盘输入一个字符串(长度<=40个字符),并以字符 '.' 结束.编辑功能有: 1 D:删除一个字符,命令的方式为: D a 其中a为被删除的字符,例如:D s 表 ...

  6. 蓝桥杯 - 算法训练 明明的随机数 C语言实现

    算法训练 明明的随机数 题目: 问题描述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个, ...

  7. [Java] 蓝桥杯ALGO-143 算法训练 字符串变换

    问题描述 相信经过这个学期的编程训练,大家对于字符串的操作已经掌握的相当熟练了.今天,徐老师想测试一下大家对于字符串操作的掌握情况.徐老师自己定义了1,2,3,4,5这5个参数分别指代不同的5种字符串 ...

  8. 蓝桥杯 ALGO-143 算法训练 字符串变换

    问题描述 相信经过这个学期的编程训练,大家对于字符串的操作已经掌握的相当熟练了.今天,徐老师想测试一下大家对于字符串操作的掌握情况.徐老师自己定义了1,2,3,4,5这5个参数分别指代不同的5种字符串 ...

  9. 蓝桥杯 算法训练 字符串合并

    资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 输入两个字符串,将其合并为一个字符串后输出. 输入格式 输入两个字符串 输出格式 输出合并后的字符串 样例输入 一个满足题目要求的输入 ...

最新文章

  1. timesten 修改最大连接数
  2. C#开发微信门户及应用(10)--在管理系统中同步微信用户分组信息
  3. php 反射 视频教程,php 实现反射
  4. Scrapy的debug方式
  5. IntelliJ IDEA 2014 付费版 免费版比较
  6. 域名解析与邮件服务器收发问题
  7. Dyn披露DDoS攻击细节:幕后是10万台的物联网设备僵尸网络
  8. Python中,如何使用ImageDraw在Image上绘制粗线?
  9. Java---计算器(标准计算器,科学计算器)的实现
  10. matlab怎么将程序加密,对于MATLAB M文件怎么加密
  11. 市场竞争力法则:以小博大,虽败犹荣
  12. html给手机震动,用了这么多年的手机,是怎么震动的你知道吗?
  13. 介绍一款非常好用的截图软件-《Snipaste》
  14. 【C语言】给出一个不多于5位的正整数,要求:1.求出它是几位数;2.分别输出每一位数字;3.按逆序输出各位数字。
  15. MinGW-w64下载安装2024年最新教程
  16. 掌握这些Revit常见术语,从此BIM建模再无压力
  17. 静态链接库(Lib) 与 动态链接库(DLL)
  18. RVM切换ruby版本
  19. Python Show-Me-the-Code 第 0020题 统计通话时长
  20. 颜色的前世今生1·一切从光开始

热门文章

  1. webservice和socket服务的区别
  2. zookeeper的ZAB协议学习
  3. 机器阅读理解中文章和问题的深度学习表示方法
  4. 【传智播客】Javaweb程序设计任务教程 黑马程序员 第三章 课后答案
  5. [leetcode]101.对称二叉树
  6. c语言 输入若干字符串 用指针和一位数组 冒泡排序,C 语言作业 - 1 - 指针使用与冒泡排序...
  7. 华为模拟器-三次交换机、链路捆绑、单臂路由综合实验
  8. [java]常用类型转化
  9. solaris系统关闭服务器,solaris系统中关闭和开启系统服务ftp,telnet,ssh,sendmail...
  10. JSP关于用户安全退出的问题