《C程序设计语言》学习笔记——练习3-3

来源:互联网 发布:java中的restfull接口 编辑:程序博客网 时间:2024/05/16 12:35

在写程序之前感觉很多细节没想清楚,写出来之后就发现有些是不需要考虑太多,应该先把主体写出来,把一些细致的地方放到下一步的调试中去。

/* 练习3-3编写函数expand(s1,s2),将字符串s1中诸如a-z一类的速记符号在字符串s2中扩展成等价的完整列表abc......xyz。允许处理大小写字母和数字,并可以处理诸如a-b-c与a-z0-9与-a-z等情况。正确安排好前导与尾随的-。*/#include <stdio.h>void expand(char *s1, char *s2){int i, j = 0, k;for (i = 0; s2[i] != '\0'; i++){if (s2[i] == '-' && i > 0 && s2[i+1] != '\0') /*遇到一个位于“中部”的'-'号 */{/* 若'-'号两边都是字母 */if ((s2[i-1] >= 'A' && s2[i-1] <= 'Z' && s2[i+1] >= 'A' && s2[i+1] <= 'Z') ||(s2[i-1] >= 'a' && s2[i-1] <= 'z' && s2[i+1] >= 'a' && s2[i+1] <= 'z')){/* 扩展并输出(不包括开头第一个字母,因其已经被输出过) */for (k = s2[i-1]+1; k <= s2[i+1]; k++)s1[j++] = k;i++;}/* 若'-'号两边都是数字 */if (s2[i-1] >= '0' && s2[i-1] <= '9' && s2[i+1] >= '0' && s2[i+1] <= '9'){/* 扩展并输出(不包括开头第一个数字,因其已经被输出过) */for (k = s2[i-1]+1; k <= s2[i+1]; k++)s1[j++] = k;i++;}}else{s1[j++] = s2[i];}}}main() {char s2[] = "-a-b-fx-z0-9-";char s1[100] = "";expand(s1, s2);printf("string:\n%s\n", s2);printf("expand:\n%s\n", s1);return 0;}


0 0
原创粉丝点击