题目:
编写函数expand(s1, s2),将字符串s1中类似于a-z一类的速记符号在字符串s2中扩展为等价的完整列表abc...xyz。该函数可以处理大小写字母和数字,并可以处理a-b-c、a-z0-9 与 -a-z等类似的情况。作为前导和尾随的-字符原样排印。
自我解答:
解题思路:在s1中查找'-'字符,若当前字符不是'-'字符,则把字符保存到s2中;在找到'-'字符之后,会判断其是否是前导和尾随字符,如果是前导或尾随字符则保存到s2中;如果不是,则取出'-'前后的字符,并copy这个区间的字符到s2中。注意这个区间的字符是不包含前后字符的,因为前后字符已经在取到相应字符时保存到了s2中。编程的核心思想是把'-'进行了字符替换。
#include <stdio.h>
void expand(char s1[], char s2[])
{
int c, d, prec, lastc;
int i = 0, j = 0;
for(; (c = s1[i]) != '\0'; i++)
{
if(c == '-')
{
if(i == 0)
s2[j++] = '-'; /* the first character is '-' */
else
{
prec = s1[i - 1];