问题描述

编写expand(s1,s2),将字符串s1中类似于a-z类的速记符号在字符串s2中扩展为等价的完整列表abc.....xyz。该函数可以处理大小写字母和数字,并可以处理a-b-c,a-z0-9和-a-z等类似的情况。作为前导和尾随的-字符原样排印。

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 . Arrange that a leading or trailing - is taken literally.

  

解题思路

题目中,速写的形式也就是数组s1中的字符串给出了四种:

a-z(短横线在两字母中间)

-a-z(最前方有短横线)

a-b-c(各个字母中间有短横线)

a-z0-9(有两个字母中间没有横线)

我们还可以加一种  a-z-(最后面有短横线)

其实我们把横线换为横线两端字母省略的字母并放在s2中就ok了,比如a-e,我们让a和e正常复制到s2中,把 - 换为bcd,

但是如果  -  在最前面或最后面就不能替换成别的字符了,需要直接把  -  本身复制到s2中。

还有一个要注意的地方,char类型,‘a’+1=‘b’

但是我们不能对数组加一来获取其他字母,比如s1[3]='a',如果我们想获得'b',需要

state=s1[3];

state+1='b';

  

代码如下

  1. #include<stdio.h>
  2. #define MAXLEN 100
  3.  
  4. void getlines(char array[],int maxlen)
  5. {
  6. int c,i;
  7. for ( i = 0; i < maxlen-1 && (c=getchar())!=EOF && c!='\n'; i++)
  8. {
  9. array[i]=c;
  10. }
  11. if (c=='\n')
  12. {
  13. array[i++]=c;
  14. }
  15. array[i]='\0';
  16. }
  17. void expand(char s1[],char s2[])
  18. {
  19. int i,j;
  20. char state;
  21. char c1_first,c1_last;//短横线左端字母,短横线右端字母
  22. i=j=0;
  23. while (s1[i])//s1[i]='\0'时跳出循环
  24. {
  25. switch (s1[i])
  26. {
  27. case '-':
  28. if (i==0 || s1[i+1]=='\0')
  29. {
  30. s2[j++] = '-';;
  31. }else
  32. {
  33. c1_first=s1[i-1];
  34. c1_last=s1[i+1];
  35.  
  36. for ( state=c1_first; state<c1_last-1; j++)//把‘-’替换为省略的字母
  37. {
  38. state++;
  39. s2[j]=state;
  40. }
  41. }
  42. break;
  43. default:
  44. s2[j++] = s1[i];
  45. break;
  46. }
  47. i++;
  48. }
  49. s2[j]='\0';
  50. }
  51.  
  52. int main()
  53. {
  54. int i;
  55. char s1[100];
  56. char s2[100];
  57. printf("请输入速写字符:");
  58. getlines(s1,MAXLEN);
  59. expand(s1,s2);
  60. printf("展开为:");
  61. for ( i = 0; s2[i]!='\0'; i++)
  62. {
  63. printf("%c",s2[i]);
  64. }
  65. return 0;
  66. }

  

  

运行结果

《C程序设计语言》 练习3-3的更多相关文章

  1. 操作系统和程序设计语言的API使用的字符编码分析

     1.Java的运行环境中,String是什么编码? 使用java做程序设计语言,字符编码是和jvm相关的,和操作系统无关. java默认的编码是jvm在安装的时候就确定了的,它是根据你的系统的环境确 ...

  2. python程序设计语言笔记 第一部分 程序设计基础

    1.1.1中央处理器(CPU) cpu是计算机的大脑,它从内存中获取指令然后执行这些指令,CPU通常由控制单元和逻辑单元组成. 控制单元用来控制和协调除cpu之外的其他组件的动作. 算数单元用来完成数 ...

  3. 扩展《C程序设计语言》练习2-3程序通用性

    最近开始自学C语言,在看K&R的<C程序设计语言>.练习2-3要求写一个函数,将输入的十六进制数字字符串转换成与之等价的整数值,配套答案没有扩展程序的通用性,所以我就稍微改造改造. ...

  4. 清风注解-Swift程序设计语言:Point11~15

    目录索引 清风注解-Swift程序设计语言 Point 11. 数值型字面量 代码事例: let decimalInteger = // 十进制的17 let binaryInteger = 0b10 ...

  5. 清风注解-Swift程序设计语言:Point6~10

    目录索引 清风注解-Swift程序设计语言 Point 6. 输出常量和变量 代码事例: // 输出的内容会在最后换行 println("hello, world") // 输出的 ...

  6. 清风注解-Swift程序设计语言:Point1~5

    目录索引 清风注解-Swift程序设计语言 Point 1. Swift 风格的"Hello, world" 代码事例: println("Hello, world&qu ...

  7. 清风注解-Swift程序设计语言

    前言 Apple 发布了全新的 Swift 程序设计语言,用来开发 iOS 和 OS X 平台的应用程序.其目的不言而喻:就是为了给老迈的 Objective-C 一个合适接班人!因此,不难预见,未来 ...

  8. C程序设计语言(第二版)习题:第一章

    第一章虽然感觉不像是个习题.但是我还是认真去做,去想,仅此而已! 练习 1-1 Run the "hello, world" program on your system. Exp ...

  9. Oberon程序设计语言简介

    Oberon奥伯龙是一种通用编程语言,也是一种同名操作系统(由Oberon语言开发,且参考过贝尔实验室的新一代网络操作系统Plan9),是由原Pascal程序设计语言的发明者Niklaus Wirth ...

  10. awk程序设计语言之-awk基础

    awk程序设计语言之-awk基础 http://man.linuxde.net/ 常用工具命令之awk命令 awk是一种编程语言,用于在Linux/Unix下对文本和数据处理.数据可以来自标准输入(s ...

随机推荐

  1. 基于Neo4j的个性化Pagerank算法文章推荐系统实践

    新版的Neo4j图形算法库(algo)中增加了个性化Pagerank的支持,我一直想找个有意思的应用来验证一下此算法效果.最近我看Peter Lofgren的一篇论文<高效个性化Pagerank ...

  2. pytorch 中交叉熵损失实现方法

  3. 数据结构(C语言版)---查找

    1.查找表:同一类型的数据元素构成的集合. 2.对查找表进行的操作:查询某特定元素.检索满足条件的元素的属性.插入元素.删除元素. 1)若对查找表进行的操作只涉及前两种,则为静态查找表:需要进行插入和 ...

  4. JQ获取select上的option的data-start和data-id

    来源:https://zhidao.baidu.com/question/692142321436883524.html 静态的写法: 用jq的attr()函数,如: HTML: <select ...

  5. Ubuntu 安装 Qt, 安装辅助软件

    sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev sudo apt-get install gcc g++ sudo apt-get inst ...

  6. [Linux] 检查是否已有进程在运行

    出处:sblim-sfcb-1.4.9 / sfcBroker.c int process_is_running() { #define STRBUF_LEN 512 #define BUF_LEN ...

  7. 自定义spring boot的自动配置

    文章目录 添加Maven依赖 创建自定义 Auto-Configuration 添加Class Conditions 添加 bean Conditions Property Conditions Re ...

  8. maven过滤配置文件

    第一种方式, 解决maven打包时,会编译特定文件导致文件不可用maven打包时,过滤不编译文件类型 <plugin>    <groupId>org.apache.maven ...

  9. iOS开发之结合asp.net webservice实现文件上传下载

    iOS开发中会经常用到文件上传下载的功能,这篇文件将介绍一下使用asp.net webservice实现文件上传下载. 首先,让我们看下文件下载. 这里我们下载cnblogs上的一个zip文件.使用N ...

  10. HDU2937 YAPTCHA(威尔逊定理)

    YAPTCHA Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...