当前位置: 代码迷 >> 综合 >> C程序设计语言 3-3
  详细解决方案

C程序设计语言 3-3

热度:69   发布时间:2024-01-20 04:24:54.0

练习 3-3 编写函数 expand(s1, s2),将字符串 s1 中类似于 a-z 一类的速记符号在字符串 s2 中扩展为等价的完整列表 abc…xyz。该函数可以处理大小写字母和数字,并可以处理 a-b-c、a-z0-9 与-a-z 等类似的情况。作为前导和尾随的-字符原样排印。
 

写完都不想看了,改的太久了。。。

#include <stdio.h>
#include <ctype.h>#define MAXLEN 1000void expand(char s[], char t[]);int main()
{int i, c;char s[MAXLEN], t[MAXLEN];printf("input string:\n");while ((c = getchar()) != EOF)s[i++] = c;expand(s, t);printf("expanded string:\n%s\n", t);return 0;
}void expand(char s[], char t[])
{int i, j, k;for (i = 0, j = 0; s[i] != '\0'; i++){if (s[i] == '-' && i > 0){if (islower(s[i-1]) && islower(s[i+1]) && s[i-1] < s[i+1]){j--;for (k = 0; k <= (s[i+1] - s[i-1]); k++, j++)t[j] =  s[i-1] + k;i++;}else if (isupper(s[i-1]) && isupper(s[i+1]) && s[i-1] < s[i+1]){j--;for (k = 0; k <= (s[i+1] - s[i-1]); k++, j++)t[j] = s[i-1] + k;i++;}else if (isdigit(s[i-1]) && isdigit(s[i+1]) && s[i-1] < s[i+1]){j--;				for (k = 0; k <= (s[i+1] - s[i-1]); k++, j++)t[j] = s[i-1] + k;i++;}elset[j++] = '-';}elset[j++] = s[i];if (s[i+1] == '\0')t[j] = '\0';}printf("break\n");return;
}