Chapter 3, 4 Answer
发布时间:2025-08-31 21:52:45
作者:益华网络
来源:undefined
浏览量(0)
点赞(0)
摘要:3-2 escape(s, t), 复制字符串 t 到 s,复制过程中将不可见字符 \t \n 分别转换成 \t \n。再编写具有相反功能的函数。 遇到一个字符就判断是不是不可见字符,是,按照规则复
3-2 escape(s, t), 复制字符串 t 到 s,复制过程中将不可见字符 \t \n 分别转换成 \t \n。再编写具有相反功能的函数。
遇到一个字符就判断是不是不可见字符,是,按照规则复制,反之直接复制。
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
void escape(char s[], char t[])
{
int i = 0, j = 0;
while(t[i] != \0)
{
switch (t[i])
{
case \n:
s[j] = \\;
s[++j] = n;
break;
case \t:
s[j] = \\;
s[++j] = t;
break;
default:
s[j] = t[i];
}
i++; j++;
}
s[j] = \0;
}
void re_escape(char s[], char t[])
{
int i = 0, j = 0;
while(t[i] != \0)
{
if(t[i] == \\)
{
i++;
switch(t[i])
{
case n:
s[j] = \n;
break;
case t:
s[j] = \t;
break;
}
}
else
s[j] = t[i];
i++;
j++;
}
s[j] = \0;
}
3-3 编写expand(s1, s2),将 s1 中类似于 a-z 速记符号在字符串 s2中扩展为等价的完整列表 abc...xyz。作为前导和尾随的 - 原样复制。
一直复制,直到遇到减号符 - ,输出 - 左边的字符直到右边的字符为止。
字母和数字在ASCII编码中是连续的。
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
void expand(char s1[], char s2[])
{
int i = 0, j = 0;
char c;
while(s1[i] == -) //前导
{
s2[j] = -;
i++; j++;
}
while(s1[i] != \0)
{
if(s1[i] != -) //非 -
s2[j++] = s1[i++];
else
{
if(isdigit(s1[i+1])||isalpha(s1[i+1])) //当前 - 后面跟的是数字或字母
{
c = s2[j-1];
while(c < s1[i+1])
s2[j++] = ++c;
i += 2; // 跳两格
}
else
s2[j++] = s1[i++]; //当前 - 后面跟的是 -
}
}
s2[j] = \0;
}
扫一扫,关注我们
声明:本文由【益华网络】编辑上传发布,转载此文章须经作者同意,并请附上出处【益华网络】及本页链接。如内容、图片有任何版权问题,请联系我们进行处理。
0