天天看点

拓展字符

问题

【问题描述】编写程序将含有缩记符号的字符串扩展为等价的完整字符串,例如将a-d扩展为abcd。该程序可以处理大小写字母和数字,并可以处理a-b-c、a-z0-9与-a-z等类似的情况。要求扩展符’-’两边的字符只要右边的大于左边就扩展(即Z-b情况也要扩展),并且’-’两边不能有空格。

【输入形式】从键盘输入包含扩展符的字符串,字符串中可以包含空格

【输出形式】输出扩展后的字符串

【输入样例1】 a-c-u-B

【输出样例1】 abcdefghijklmnopqrstu-B

【输入样例2】 a-b-c a-a 0-4

【输出样例2】 abc a-a 01234

【样例说明】扩展输入a-c-u为:abcdefghijklmnopqrstu,而B比u值小,所以无法扩展,直接输出。

算法分析

先将要扩展的字符串读到一个字符数组(s1)中;

设另一个字符数组用于存放扩展后的字符串(s2);

依次检查所读入字符串(s1)中字符;

将s1[i]原封不动的写到s2中;

当s1[i+1]==‘-’ && s1[i] < s1[i+2]时,

    将s1[i]至s1[i+2]之间的字符展开到s2中

如下图:

拓展字符

算法实现

#include <stdio.h>
#define
int main()
{
  char c,s1[MAXLINE],s2[MAXLINE];
  int i,j;
  i = j = 0;
  gets(s1);
  while(s1[i] != '\0'){
    s2[j++] = s1[i];
    if(s1[i+1] == '-' && s1[i] < s1[i+2]){
      for(c = s1[i]+1; c < s1[i+2]; c++)
        s2[j++] = c;
      i = i+2;
    }
    else i++;
  }
  s2[j] = '\0';
  puts(s2);
  return 0;
}      

继续阅读