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. ...
随机推荐
- js中文乱码问题,编码设为utf-8,但还是乱码问题。
dw中编辑js的时候使用另存为菜单,在存储的时候勾选上一个叫[包括Unicode签名(BOM)(S)]的选项,然后存储.再次在浏览器源码中查看的时候js的中文就正常显示了,查看属性,编码也是UTF-8 ...
- Android中ViewPager实现滑动条及与Fragment结合的实例教程
ViewPager类主要被用来实现可滑动的视图功能,这里我们就来共同学习Android中ViewPager实现滑动条及与Fragment结合的实例教程,需要的朋友可以参考下 自主实现滑动指示条先上一个 ...
- 绿色版mysql注册卸载服务
如果直接用绿色版的mysql,则下载后解压,只需对目录下的my.ini文件的basedir(mysql的基本目录)和datadir(mysql数据目录)指定就可以,如下所示. #Path to ins ...
- 最烂编程语言得主:javascript
C++在我脑中一直是一门缺乏设计和远见的语言,其设计者也是缺少主见的人(我承认我对c++有一定偏见),在我看来,C++从一开始就是堆叠语言特性,成为最流行的语言,,只是这个时代将它推到了最前列,我心中 ...
- android 学习视频汇总
1.java基础知识 http://www.eoeandroid.com/thread-333511-1-1.html 网易公开课-抽象编程:http://open.163.com/special/o ...
- 数据库的硬迁移和mysql 5.5.38源码安装
场景:一台服务器出现了故障,需要把数据库迁移到另一台服务器上,由于数据效大,直接压缩数库的数据目录(在数据库DOWN的情况下)数据库版本mysql 5.5.38安装方式:源码安装思路:在另一台服务器上 ...
- HTML5学习笔记(十八):闭包
高阶函数 JavaScript的函数其实都指向某个变量.既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,也可以返回一个函数,这种函数就称之为高阶函数. 函数作为参 ...
- 关于checkbox选中问题总结
(1)ng-checked的值只是用来决定初始状态时选中还是为选中,ng-model 才是随着复选框是否被选中,来实时改变它绑定变量的值. (2)如果初始状态ng-checked和ng-model指 ...
- 解决failed to get the required adt version from sdk version
在网上看了很多,选择其中的一个解决方法试了下, 还行. AS 2.3之后不能和Eclipse共用一个SDK,给Eclispe重新配置一个SDK路径
- django rest_framework入门五-认证和权限
1.django User实体 django自带了用户验证模块,django/contrib/auth/models.py定义了用户实体,代码如下: class AbstractUser(Abstra ...