题干:

Write a function expand(s1,s2) that expands shorthand notations like a-z in the string s1 into the equivalent complete list abc...xyz in s2. Allow for letters of either case and digits, and be prepared to handle cases like a-b-c and a-z0-9 and -a-z and a--z. Arrange that a leading or trailing - is taken literally.

Please be attention to the SAMPLE INPUT. It may help you a lot. You just need to think about and try to solve these several conditions as the question says.

函数接口定义:

void expand(char [], char []);

裁判测试程序样例:

#include <stdio.h>
#include <assert.h>
const int N = 10001;void expand(char [], char []);int main()
{
//    freopen("0.in", "r", stdin);
//    freopen("0.out", "w", stdout);char s1[N], s2[N * 30];while(scanf("%s", s1) != EOF) {expand(s1, s2);printf("%s\n", s2);}return 0;
}/* 请在这里填写答案 */

SAMPLE INPUT:

a-z
A-A
0-9
c--z
-a-c
a-cf
a-c-f

SAMPLE OUTPUT:

abcdefghijklmnopqrstuvwxyz
A
0123456789
c--z
-abc
abcf
abcdef

我的解法:(萌新一个,写的很烂)

#include <ctype.h>void expand(char s1[], char s2[])
{int i = 0,j = 0;int tmp = 0;for(i = 0;s1[i];i++){if(s1[i] != '-')//非'-'直接输出s2[j++] = s1[i];else{if(i)//判断首位是否为‘-‘{if((islower(s1[i-1]) && islower(s1[i+1]))||(isupper(s1[i-1]) && isupper(s1[i+1]))||(isdigit(s1[i-1]) && isdigit(s1[i+1])))//判断‘-’两端类型{if(s1[i - 1] != s1[i + 1])//判断是否为同一字符{tmp = s1[i + 1] - s1[i - 1];if(tmp >= 0)for(int k = 1;k < tmp;k++)s2[j++] = s1[i - 1] + k;elses2[j++] = '-';}else//相同字符只输出一个i++;}else//'-'两端字符类型不同直接输出'-'s2[j++] = '-';}elses2[j++] = '-';}}s2[j] = '\0';//结束数组
}

存在的坑:

除了样例给出的输入输出类型外,还需注意a-z0-9A--(-在尾),以及c-a倒叙排列原样打印(坑了我最长时间的一个)。

思考:

由于PTA测试过程中,测试点1始终不通过,而且没有任何提示(提示呢?提示救一下啊),令我苦恼很长时间:

这时CSDN上一篇文章给了我思路:

如何测出PAT 测试点的测试数据?_where,dyouwannago的博客-CSDN博客_pta测试点怎么看

最终我决定使用以上思路,测试PTA的测试点数据:

//判断点1有3个数据(不同)以及一个‘\0’void expand(char s1[],char s2[])
{if(s1[0] == (s1[2] - 1))s2[0] = '\0';elsewhile(1);
}

通过修改if条件以及善用ctype.h头文件中的islower,isupper,isdigit等函数以及对s1数组值的相等判断,最终确定判断点1有3个不同数据以及一个‘\0,左右两端数据类型相同都是字母或数字,中间数据为‘-’

最终确定判断点一为c-a类型的倒序测试数据。

当然,测试PTA数据的方式不止这一种思路,但是其他的我暂时看不懂,姑且附在这里,方便日后学习:

什么是对数器?对数器的作用是什么?_Bean冷的心的博客-CSDN博客_对数器

对于PTA exercise 3-3 Write a function expand(s1,s2) 问题的一种解法与思考相关推荐

  1. C语言程序设计 6-3 exercise 3-3 (10分) Write a function expand(s1,s2) that expands shorthand notations like

    C语言程序设计 第二版 第三章 第三章课后实战,完成全部的函数题(70分):自己选择编程题完成40分即可. 剩余时间:15天 6-3 exercise 3-3 (10分) Write a functi ...

  2. Function Point Estimation 功能点估算是一种用来估算项目大小的技术。

    功能点分析的简介:Function Point Estimation 功能点估算是一种用来估算项目大小的技术. 功能点分为两种:未调整功能点和调整功能点.未调整功能点是只记用户可见功能的中间结果,调整 ...

  3. R如何正确动态创建变量名,解决target of assignment expands to non-language object

    在一个群里,看到一位朋友发了一堆代码, 错误代码 以及一个报错信息,Error in paste(.....) :could not find function "paste←" ...

  4. Delphi procedure and function

    [标准函数和过程] 首部 procedure Abort;$[SysUtils 功能 引起放弃的意外处理. 说明 不显示任何错误信息. 首部 function Abs(N: ): ;$[System ...

  5. 泛型排序器TComparer

    测试代码文件: --------------------------------------------------------------------------------   unit Unit ...

  6. AngularJS基本知识点

    AngularJS 是一个 MV* 框架,最适于开发客户端的单页面应用.它不是个功能库,而是用来开发动态网页的框架.它专注于扩展 HTML 的功能,提供动态数据绑定(data binding),而且它 ...

  7. 左右两个下拉列表框的选项互移及获值效果

    效果截图: 源代码: <script   language="JavaScript">     <!--     /*move(s1,s2,flag):s1是源列 ...

  8. Dom 学习总结及其实例

    1.   重新导航到指定的地址:navigate("http://www.cnblogs.com/daomul/"); 2. (1.*setInterval每隔一段时间执行指定的代 ...

  9. python调用php命令行,python调用php函数 python怎样调用php文件中的函数详解

    前言 python调用php代码实现思路:php文件可通过在terminal中使用php命令行进行调用,因此可使用python开启子进程执行命令行代码.函数所需的参数可通过命令行传递. 测试环境 1. ...

最新文章

  1. nullnullDataTable 排序
  2. 云原生应用如何做到低成本获得高稳定?
  3. 正则表达式真的很骚,可惜你不会写
  4. zookeeper安装启动报错引发的版本取用思考
  5. 学习人工智能的头四个月
  6. c#时分秒毫秒微妙_C# 关于DateTime类型 精确到毫秒
  7. 10个JavaScript图像处理库,收藏好留备用
  8. 如何监控oracle的索引是否使用
  9. DML 数据操纵语言
  10. 移动端——论使用图片撑出模拟背景所带来的好处(主要解决图片之上是一些动态变化的内容,图片的效果难以使用程序来实现)...
  11. 开源:OpenJDK8 MIPS64(龙芯)
  12. C语言 打印数组为什么要用循环
  13. JQuery的选择器对控件ID含有特殊字符的解决方法
  14. Mac VMWare键盘鼠标失灵
  15. 谁说大象不能跳舞——《读书笔记》
  16. Django源码cookie解读:关于中文cookie会被吞掉并截断的问题。
  17. 读书百客:《宿新市徐公店》评赏
  18. 2020-10-20 任务三(一) RTOS系统初识
  19. transformer的简要解读(应该都能看懂)
  20. 对SLAM和自动驾驶定位的思考,最新自动驾驶视觉SLAM方法综述!

热门文章

  1. 高校专家数据爬虫 专家查查https://zjchacha.cn/
  2. 含文档+PPT+源码等]精品基于Nodejs实现的智慧小区服务系统[包运行成功]Nodejs毕业设计计算机项目源码
  3. developer工具oracle导出,[转]PL/SQLDeveloper导入导出Oracle数据库方法
  4. php银行支付教学课程,php版交通银行网银支付接口开发入门教程
  5. 云计算之路-阿里云上:超级奇怪的“黑色10秒钟”
  6. 【Python数据结构系列】❤️《栈(顺序栈与链栈)》——❤️知识点讲解+代码实现
  7. janus视频房间插件协议交互整理
  8. SEO诗歌之“百雅歌”
  9. 关于微信分身,同时登陆两个微信
  10. 利用弹弹play播放器在线观看视频的办法