Skip to content

Commit d6e7371

Browse files
committed
3.5
1 parent 509aa60 commit d6e7371

File tree

4 files changed

+131
-0
lines changed

4 files changed

+131
-0
lines changed

chapter-3-control-flow/5.atoi.c

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#include <ctype.h>
2+
#include <stdio.h>
3+
4+
main()
5+
{
6+
printf("%d\n", atoi("123"));
7+
printf("%d\n", atoi("+1"));
8+
printf("%d\n", atoi("-0"));
9+
printf("%d\n", atoi("-123"));
10+
printf("%d\n", atoi("asd345"));
11+
printf("%d\n", atoi("789asd345"));
12+
}
13+
14+
int atoi(char s[])
15+
{
16+
int i, n, sign;
17+
18+
for (i = 0; isspace(s[i]); i++)
19+
;
20+
21+
sign = (s[i] == '-') ? -1 : 1;
22+
23+
if (s[i] == '+' || s[i] == '-')
24+
i++;
25+
26+
for (n = 0; isdigit(s[i]); i++)
27+
n = 10 * n + (s[i] - '0');
28+
29+
return sign * n;
30+
}
31+

chapter-3-control-flow/6.shellsort.c

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#include <stdio.h>
2+
3+
void shellsort(int [], int);
4+
void printArr(int [], int);
5+
6+
main()
7+
{
8+
int len = 12;
9+
int v[] = {11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
10+
printArr(v, len);
11+
shellsort(v, len);
12+
printArr(v, len);
13+
}
14+
15+
// sort v[0]...v[n-1] into increasing order
16+
void shellsort(int v[], int n)
17+
{
18+
int gap, i, j, temp;
19+
20+
for (gap = n / 2; gap > 0; gap /= 2)
21+
for (i = gap; i < n; i++)
22+
for (j = i - gap; j >= 0 && v[j] > v [j + gap]; j -= gap) {
23+
printf("gap: %d, i: %d, j: %d, j+gap: %d\n", gap, i, j, j+gap);
24+
temp = v[j];
25+
v[j] = v[j+gap];
26+
v[j+gap] = temp;
27+
}
28+
}
29+
30+
void printArr(int v[], int len)
31+
{
32+
int i;
33+
for (i = 0; i < len; i++)
34+
printf("%d ", v[i]);
35+
printf("\n");
36+
}

chapter-3-control-flow/7.reverse.c

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#include <stdio.h>
2+
#include <string.h>
3+
4+
void reverse(char[]);
5+
6+
main()
7+
{
8+
char a[] = "Hello, World!";
9+
reverse(a);
10+
printf("%s\n", a);
11+
}
12+
13+
void reverse(char s[])
14+
{
15+
int c, i, j;
16+
17+
for (i = 0, j = strlen(s) - 1; i < j; i++, j--) {
18+
c = s[i];
19+
s[i] = s[j];
20+
s[j] = c;
21+
}
22+
}

chapter-3-control-flow/8.expand.c

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#include <stdio.h>
2+
3+
#define MAX_LEN 1024
4+
5+
void expand(char s1[], char s2[]);
6+
7+
main()
8+
{
9+
char s1[] = "-a-z-A-Z-0-9-asd-5-5-5-9a-ZZ-A-G-N-T-Z";
10+
char s2[MAX_LEN];
11+
expand(s1, s2);
12+
printf("%s\n", s2);
13+
14+
char s[] = "-a-z 0-9 a-d-f -0-2 some text 1-1 WITH CAPITALS! 0-0 5-3 -";
15+
char t[MAX_LEN];
16+
expand(s, t);
17+
printf("%s\n", t);
18+
}
19+
20+
void expand(char s1[], char s2[])
21+
{
22+
int i, j, k;
23+
24+
for (i = 0, j = 0; s1[i] != '\0'; i++) {
25+
if (s1[i] == '-' && i > 0 && s1[i+1] != '\0') {
26+
int p = s1[i-1];
27+
int n = s1[i+1];
28+
if (p < n &&
29+
((p >= 'a' && n <= 'z') || (p >= 'A' && n <= 'Z') || (p >= '0' && n <= '9'))
30+
) {
31+
for (k = p + 1; k < n; k++)
32+
s2[j++] = k;
33+
} else {
34+
s2[j++] = s1[i];
35+
}
36+
} else {
37+
s2[j++] = s1[i];
38+
}
39+
}
40+
41+
s2[j] = '\0';
42+
}

0 commit comments

Comments
 (0)