C语言 · 字符串的展开
(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 2 1 abcs-w1234-9s-4zz |
abcsttuuvvw1234556677889s-4zz |
| 输入 | 输出 |
| 2 3 2 a-d-d |
aCCCBBBd-d |
| 输入 | 输出 |
| 3 4 2 di-jkstra2-6 |
dijkstra2************6 |
100%的数据满足:1<=p1<=3,1<=p2<=8,1<=p3<=2。字符串长度不超过100
/*
原则:
先排除不用填充的情况;
在由p1,p2求出要填充的字符串(也可以放在数组中);
再由p3来判断是否需要倒置填充.
*/
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define maxmap 10000
int p1,p2,p3;
int index;//表索引
int lenz=;//存放填充字符串的长度
char str[maxmap],result[maxmap];
int main(){
scanf("%d%d%d",&p1,&p2,&p3);
scanf("%s",&str);//录入字符串
int len = strlen(str);//获取字符串长度
for(int i=;i<len;i++){
/*
不需要填充的情况 :
-在首尾,不用填充;
-前后分别为数字和字母,不用填充;
-前后是连续的,不用填充.
*/
if(str[i] != '-' || !((str[i-]>='' && str[i+]<='') || (str[i-]>='a' && str[i+]<='z'))){
result[index++]=str[i];
}
/*-前后差值大于25,说明分别为字母和数字,不需要填充*/
else if(str[i+]-str[i-]>){
result[index++]=str[i];
}
else if(str[i+]-str[i-]<=){
result[index++]=str[i];
}
else{
if(str[i-]<=str[i]){//原字符不是正序也不需要填充的情况
result[index++] = str[i];
}
else {//原字符是正序则需要填充
char insert;//表示填充的字符
if(p1== && str[i-]>='a' && str[i-]<='z'){//p1=2,填充大写
insert = str[i-] - ('a'-'A')+;
}else{//否则按顺序填充就行
insert = str[i-]+;
}
if(p1==){//p1=3,填充 *
insert = '*';
}
lenz = str[i+]-str[i-];//获得填充字符串的长度
if(insert == '*'){//若填充字符为*
for(int k=;k<lenz;k++){
for(int j=;j<p2;j++){//填充p2个字符
result[index++] = insert;
}
}
}else{
if(p3==){//逆序填充
insert+=lenz-;
for(int k=;k<lenz;k++,insert--){
for(int j=;j<p2;j++){
result[index++] = insert;
}
}
}
if(p3==){//原序填充
for(int k=;k<lenz;k++,insert++){
for(int j=;j<p2;j++){
result[index++] = insert;
}
}
}
}
}
}
}
printf("%s",result);
return ;
}
C语言 · 字符串的展开的更多相关文章
- Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
** 算法训练 字符串的展开 ** 题目: 在初赛普及组的"阅读程序写结果"的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于"d-h" ...
- C语言字符串操作总结大全(超详细)
本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat( ...
- C语言字符串拷贝
C语言字符串拷贝利用指针操作,要清楚知道指针的指向 代码如下: #include <stdio.h> #include <assert.h> #include <stri ...
- AC日记——字符串的展开 openjudge 1.7 35
35:字符串的展开 总时间限制: 1000ms 内存限制: 65536kB 描述 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h ...
- C语言字符串长度(转)
C语言字符串长度的计算是编程时常用到的,也是求职时必考的一项. C语言本身不限制字符串的长度,因而程序必须扫描完整个字符串后才能确定字符串的长度. 在程序里,一般会用strlen()函数或sizeof ...
- C语言字符串操作常用库函数
C语言字符串操作常用库函数 *********************************************************************************** 函数 ...
- c语言字符串操作大全
C语言字符串操作函数 函数名: strcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例: #incl ...
- TYVJ P1053 字符串的展开 Label:字符 水
背景 NOIP2007年提高组第2道 描述 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或“4-8”的子串,我们就把它当作一种简 ...
- 转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...
随机推荐
- 字符集不同导致的ORA-00972
使用ssh登录RAC的两个节点,分别执行相同的sql语句,发现其中一个报错ora-00972: 检查后发现,左侧节点的客户端使用的字符集是SecureCRT的默认字符集,右侧使用的是UTF-8
- java环境变量设置与java查看安装路径
把jdk安装到计算机中之后,我们来进行设置使java环境能够使用. 首先右键点我的电脑.打开属性.然后选择“高级”里面的“环境变量”,在新的打开界面中的系统变量需要设置三个属性“JAVA_HOME”. ...
- labview程序性能优化
课时15: 中级08:LabVIEW运行性能(作者:NI应用工程师 李甫成) 一.避免强制类型转换 二.防止内存泄漏 三.将vi的一部分转化为子vi 四轴项目中所占内存对比,变为子vi后执行速度也快了 ...
- java时区转化相关工具方法
import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java. ...
- 转 阿里Dubbo疯狂更新,关Spring Cloud什么事?
原文地址: http://www.ityouknow.com/springcloud/2017/11/20/dubbo-update-again.html阿里Dubbo疯狂更新,关Spring Clo ...
- 另辟蹊径 直取通州的“墨迹天气”APP应用的成功故事
一个天气应用,曾被认为是要挑战国家气象局,网站也莫名其妙地被封,两个合伙人先后离开.创始人金犁是如何把这么一款工具类应用做到人所共知的? 采访 | 郑江波 翟文婷 文 | 翟文婷 出生时间:1982年 ...
- 关于easyui combobox下拉框实现多选框的实现
好长时间没有更博了,一是因为最近真的比较忙,二是因为自己是真的偷懒了,哈哈 好啦,这篇博客主要是总结一些关于easyui combobox下拉框实现多选框的实现,包括前台界面的展示,和后台对数据的获取 ...
- windowns 2008(apache2.2.25 x86 openssl0.98y) 升级openssl1.0.1e(为了支持小程序接口TLS1.2)
原来只知道微信小程序,服务器接口必须支持 https, 所以在搭建环境的时候没有注意, 只是在原来已有的系统框架上,稳健升级,把apache2.2.25 X86_no_openssl升级为了apach ...
- 未能加载文件或程序集“Microsoft.SqlServer.Management.Sdk.Sfc, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91”或它的某一个依赖项。系统找不到指定的文件。
莫名其妙的,在 VS 中添加数据库连接就报这个错误,经过查找,解决方法是重新安装下两个sql server的组件:SharedManagementObjects.msi 和 SQLSysClrType ...
- Android Gradle 引入 aar 方式
方式 1 File -> New -> New Module -> Import .JAR/.AAR Package Choose File Finish 在 build.gradl ...