5-5扩展字符

【问题描述】
编写一函数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;
}

发布了71 篇原创文章 · 获赞 36 · 访问量 9452

猜你喜欢

转载自blog.csdn.net/qq_34686440/article/details/105058644