题目:编写函数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
}
呆码农梦中识bug,程序员哭求加工资 发布了28 篇原创文章 · 获赞 10 · 访问量 375 私信 关注