K&R 読んでやっているんですが a-z を abcdef...vwxyz というふうに展開する関数
が上手く作れません。
a-z なんかは一応できていますが
・最初と最後のハイフンは文字として扱う
・a-z0-9 といったものも扱う
といった機能を作るとフラグが増えて分岐処理が増え冗長な気がしてイヤンです。

もうちとスマートに書けないものでしょうか。

char *expand(char *s1,char *s2){
int i,j,k;
int flag1,flag2;
char start,end;

flag1=flag2=0;

for(i=0;s1[i];i++){
if(s1[i]!='-'&&!flag1){
start=s1[i];
flag1=1;
}else if(s1[i]=='-'&&flag1){
flag2=1;
}else if(flag1&&flag2&&s1[i]!='-'){
end=s1[i];
for(j=0;start<=end;j++,start++){
s2[j]=start;
}
}
}
s2[j]='\0';
return s2;
}