问题
【问题描述】编写程序将含有缩记符号的字符串扩展为等价的完整字符串,例如将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中
如下图:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CO5QTNxQmM0Q2MiFjMjJzMzYzX1UzNycTM3IzLclDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
算法实现
#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;
}