/* expands shorthand notation like a-z in s1 into the equivalent * complete list abc...xyz in s2 */ #include void expand(char s1[], char s2[]) { int i, j, k, step; for (i = j = 0; s1[i] != '\0'; i++) { if (isalnum(s1[i])) { if (s1[i+1] != '-' || !isalnum(s1[i+2])) continue; step = (s1[i] > s1[i+2]) ? -1 : 1; for (k = 0; (s2[j++] = s1[i]+k) != s1[i+2]; k += step); s2[j] = '\0'; i++; } else if (s1[i] == '-' && i == 0) { s2[j++] = '-'; } } if (s1[i-1] == '-') { s2[j++] = '-'; s2[j] = '\0'; } } int main(void) { char s[30], t[1000]; printf("foo: "); scanf("%s", s); putchar('\n'); expand(s, t); printf("%s\n", t); return 0; }