【问题描述】
编写一函数expand(s1,s2),用以将字符串s1中的缩记符号在字符串s2中扩展为等价的完整字符,例如将a-d扩展为abcd。该函数可以处理大小写字母和数字,并可以处理a-b-c、a-z0-9与-az等类似的情况。在main函数中测试该函数:从键盘输入包含缩记符号的字符串,然后调用该函数进行扩展,输出扩展结果。(教材 P63:Exercise 3-3)
注意:
待扩展字符串中有可能包含空格,例如:a-d x-z应扩展成:abcd xyz。所以读入待扩展字符串时,应能够读入包含空格的字符串;
只要缩记符号-之后的字符比之前的字符的ASCII码值大,就要将它们之间的所有字符扩展出来,例如:Z-a之间的字符也要扩展出来;
特殊情况:a-b-c将被扩展为:abc。a-a将被扩展为:a-a。
【输入形式】 从键盘输入包含扩展符的字符串
【输出形式】 输出扩展后的字符串
【输入样例】 a-c-u-B
【输出样例】 abcdefghijklmnopqrstu-B
#include<stdio.h>
#include<string.h>
void expand(char s1[],char s2[])
{
int len = strlen(s1);
int ci = 0;
for(int i = 0;i<len;i++)
{
if(s1[i] == '-')
{
if(i == 0)
{
s2[ci++] = '-';
}
else
{
if(s1[i-1] == s1[i + 1])
s2[ci++] = '-';
else if(s1[i-1] + 1 == s1[i+1]){}
else if(s1[i-1] + 1 < s1[i + 1])
{
int tmp = 1;
while(s1[i-1] + tmp != s1[i+1])
{
s2[ci++] = s1[i-1] + tmp;
tmp++;
}
}
else if(s1[i-1]>s1[i+1])
s2[ci++] = '-';
}
}
else
{
s2[ci++] = s1[i];
}
}
s2[ci] = '\0';
}
int main()
{
char s1[100];
char s2[100];
int ci = 0;
memset(s1,0,sizeof(s1));
memset(s2,0,sizeof(s2));
//scanf("%s",s1);
int c;
while( (c = getchar()) != EOF)
{
s1[ci++] = c;
}
s1[ci] = '\0';
expand(s1,s2);
printf("%s\n",s2);
return 0;
}