-
Notifications
You must be signed in to change notification settings - Fork 0
/
cp3-3.c
66 lines (51 loc) · 1.25 KB
/
cp3-3.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include<stdio.h>
#define MAX 100
void expand(char s1[],char s2[]);
void my_expand(char s1[],char s2[]);
main()
{
char a[MAX],b[MAX];
char c[MAX],d[MAX];
//printf("please input:\n");
//gets(a);
//expand(a,b);
//printf("expanded resulted %s\n",b);
gets(c);
my_expand(c,d);
printf("my_expanded resulted %s\n",d);
}
void expand(char s1[],char s2[])
{
char c;
int i,j;
i=j=0;
while((c=s1[i++])!='\0')/*先读入一个字符(a)*/
if(s1[i]=='-'&&s1[++i]>=c)/*对下一个字符和下下个字符判断,如果下一个字符是-,再下一个字符大于当前字符(a-g)*/
{
/*i++;*//*再到下一个字符,如果上面是s1[i+1]的话,i并没有被改变,所以此处要+1*/
while(c<s1[i])/*对速记符号扩展,s1[i]现在是结束的一个字符*/
s2[j++]=c++;/*拷贝字符*/
}
else/*不符合a-g这种模式*/
s2[j++]=c;/*原样拷贝*/
s2[j]='\0';
}
void my_expand(char s1[],char s2[])
{
int i=0;
int j=0;
char c;
for(i=0;s1[i]!='\0';i++)
{
if(s1[i]=='-'&&(s1[i-1]<s1[i+1]))/*如果读取到一个-,比较该符号前面一个字符和后面一个字符的大小*/
{
c=s1[i];
while(c<s1[i+1])/*扩展字符*/
s2[j++]=++c;
}
else
s2[j++]=s1[i];/*原样拷贝*/
}
s2[j]='\0';
}
/*a-f*/