C程序设计语言-练习3-3
题目:编写函数expand(s1, s2),将字符串中类似于a-z一类的速记符号在字符串
s2中扩展为等价的完整列表abc...xyz,并可处理a-b-c、a-z0-9、于-a-z等类似
的情况。作为前导和尾随的的-字符原样排印。
1)假设s2的的空间足够存放扩展后的s1。
2)为简化程序,我就不考虑前导和尾随字符了。
1 #include <iostream>
2
4 using namespace std;
5
6 //扩展s1到s2,假设s2的空间足够大
7 void Expand(char s1[], char s2[])
8 {
9 int j = 0;
10 for(int i = 0; s1[i] != '\0'; i++)
11 {
12 if(s1[i] == '-')
13 {
14 char min = s1[i-1] + 1;
15 while(s1[i+2] == '-')
16 i += 2;
17 char max = s1[i+1] - 1;
18 while(min <= max)
19 s2[j++] = min++;
20 }
21 else
22 {
23 s2[j++] = s1[i];
24 }
25 }
26 s2[j] = '\0';
27 }
28
29 void Print(char s[])
30 {
31 for(int i = 0; s[i] != '\0'; i++)
32 {
33 cout << s[i];
34 }
35 }
36
37 int main()
38 {
39 char s1[100] = {"a-b-c-da-b-c-da-b-c-d"};
40 char s2[500];
41 Expand(s1, s2);
42 Print(s2);
43 cout << endl;
44
45 return 0;
46 }
2
4 using namespace std;
5
6 //扩展s1到s2,假设s2的空间足够大
7 void Expand(char s1[], char s2[])
8 {
9 int j = 0;
10 for(int i = 0; s1[i] != '\0'; i++)
11 {
12 if(s1[i] == '-')
13 {
14 char min = s1[i-1] + 1;
15 while(s1[i+2] == '-')
16 i += 2;
17 char max = s1[i+1] - 1;
18 while(min <= max)
19 s2[j++] = min++;
20 }
21 else
22 {
23 s2[j++] = s1[i];
24 }
25 }
26 s2[j] = '\0';
27 }
28
29 void Print(char s[])
30 {
31 for(int i = 0; s[i] != '\0'; i++)
32 {
33 cout << s[i];
34 }
35 }
36
37 int main()
38 {
39 char s1[100] = {"a-b-c-da-b-c-da-b-c-d"};
40 char s2[500];
41 Expand(s1, s2);
42 Print(s2);
43 cout << endl;
44
45 return 0;
46 }