- 题目来源:《The C programming language》中的习题P49
- 练习2-9: 编写函数expand(s1, s2),将字符串s1中类似于a-z一类的速记符号在字符串s2中扩展为等价的完整列表abc...xyz。该函数可以处理大小写字幕和数字,并可以处理a-b-c、a-z0-9与-a-z等类似的情况。作为前道和尾随的-字符原样打印。
- 代码实现:
#include<stdio.h> #include<string.h> #define MAX 1000 //判断是否为字母或者数字 int chargeCon(char c1){ if((c1 >= '0' && c1 < '9') || (c1 >= 'a' && c1 <= 'z') || (c1 >= 'A') && c1 <= 'Z'){ return 1; }else{ return 0; } } // 字符扩展 int expandToFull(char c1, char c2, char* s,int pos){ int i; if(c1 < c2){ i = c1 + 1; for(; i< c2 + 0; i++){ s[pos++] = i; } }else{ i = c1 - 1; for(; i > c2 + 0; i--){ s[pos++] = i; } } return pos; } // 扩展,即将a-z扩展为abcd..xyz void expand(char* s1, char* s2){ int i, j, flag1, flag2; s2[0] = s1[0]; j = 1; for(i = 1; i < strlen(s1); i++){ flag1 = chargeCon(s1[i-1]); flag2 = chargeCon(s1[i+1]); // 如果是速记符号 if( flag1 == 1 && flag2 == 1 && s1[i]=='-'){ j = expandToFull(s1[i-1], s1[i+1], s2, j); }else{ s2[j++] = s1[i]; } } s2[j]='