练习 3-3 编写函数expand(s1, s2) (C语言 + 详细注释)

题目:编写函数expand(s1, s2),将字符串s1中类似于a-z一类的速记符号在字符串s2中扩展为等价的完整列表abc···xyz。该函数可以处理大小写字母和数字,并可以处理a-b-c、a-z0-9与-a-z等类似的情况

思路:遍历字符串的每一个字符,先找到'-',看它两侧的字符是否是同一类型的,是的话就扩展否则就不扩展

代码:

void expand(char* s1, char* s2) {
    int i, j, m;
    j = 0;
    for (i = 0; s2[i]; i++)
        if (s2[i] != '-')        //以‘-’为参照,看它前后是否为同一类型
            s1[j++] = s2[i];    //非‘-’的字符直接复制
        else {
            if (islower(s2[i - 1]) && islower(s2[i + 1]) || isdigit(s2[i - 1]) && isdigit(s2[i + 1])) {             //是同一类型
                int k = s2[i + 1] - s2[i - 1];        //k表示要补充的字符数
                for (m = 1; m < k; m++)
                    s1[j++] = s1[i - 1] + m;         
            }
            else        //‘-’两侧的字符不是同类的,就把‘-’赋过去
                s1[j++] = '-';
        }
    s1[j] = '\0';        //别忘了\0

}

发布了28 篇原创文章 · 获赞 10 · 访问量 374

猜你喜欢

转载自blog.csdn.net/qq_45472866/article/details/104059573