Blame


1 5dc21454 2023-07-14 jrmu /*
2 5dc21454 2023-07-14 jrmu * Exercise 3-6. Write a version of itoa that accepts three arguments instead
3 5dc21454 2023-07-14 jrmu * of two. The third argument is a minimum field width; the converted number
4 5dc21454 2023-07-14 jrmu * must be padded with blanks on the left if necessary to make it wide enough.
5 5dc21454 2023-07-14 jrmu */
6 5dc21454 2023-07-14 jrmu
7 5dc21454 2023-07-14 jrmu #include <stdio.h>
8 5dc21454 2023-07-14 jrmu #include <stdlib.h>
9 5dc21454 2023-07-14 jrmu #include <limits.h>
10 5dc21454 2023-07-14 jrmu #include <string.h>
11 5dc21454 2023-07-14 jrmu
12 5dc21454 2023-07-14 jrmu void reverse(char s[]) {
13 5dc21454 2023-07-14 jrmu int c, i, j;
14 5dc21454 2023-07-14 jrmu for (i = 0, j = strlen(s) - 1; i < j; i++, j--) {
15 5dc21454 2023-07-14 jrmu c = s[i];
16 5dc21454 2023-07-14 jrmu s[i] = s[j];
17 5dc21454 2023-07-14 jrmu s[j] = c;
18 5dc21454 2023-07-14 jrmu }
19 5dc21454 2023-07-14 jrmu }
20 5dc21454 2023-07-14 jrmu
21 5dc21454 2023-07-14 jrmu void itoa(int n, char s[], int width) {
22 5dc21454 2023-07-14 jrmu int i, sign;
23 5dc21454 2023-07-14 jrmu if ((sign = n) < 0)
24 5dc21454 2023-07-14 jrmu n = -n;
25 5dc21454 2023-07-14 jrmu i = 0;
26 5dc21454 2023-07-14 jrmu do {
27 5dc21454 2023-07-14 jrmu s[i++] = n % 10 + '0';
28 5dc21454 2023-07-14 jrmu } while ((n /= 10) > 0);
29 5dc21454 2023-07-14 jrmu if (sign < 0)
30 5dc21454 2023-07-14 jrmu s[i++] = '-';
31 5dc21454 2023-07-14 jrmu while (i < width) {
32 5dc21454 2023-07-14 jrmu s[i++] = ' ';
33 5dc21454 2023-07-14 jrmu }
34 5dc21454 2023-07-14 jrmu s[i] = '\0';
35 5dc21454 2023-07-14 jrmu reverse(s);
36 5dc21454 2023-07-14 jrmu }
37 5dc21454 2023-07-14 jrmu
38 5dc21454 2023-07-14 jrmu int assert(char *expect, char *actual) {
39 5dc21454 2023-07-14 jrmu printf("Expect: %s\n", expect);
40 5dc21454 2023-07-14 jrmu printf("Actual: %s\n", actual);
41 5dc21454 2023-07-14 jrmu return strcmp(expect, actual);
42 5dc21454 2023-07-14 jrmu }
43 5dc21454 2023-07-14 jrmu int main() {
44 5dc21454 2023-07-14 jrmu char s[100];
45 5dc21454 2023-07-14 jrmu char *t;
46 5dc21454 2023-07-14 jrmu itoa(231523, s, 10);
47 5dc21454 2023-07-14 jrmu assert(" 231523", s);
48 5dc21454 2023-07-14 jrmu itoa(-131523, s, 10);
49 5dc21454 2023-07-14 jrmu assert(" -131523", s);
50 5dc21454 2023-07-14 jrmu itoa(34, s, 0);
51 5dc21454 2023-07-14 jrmu assert("34", s);
52 5dc21454 2023-07-14 jrmu itoa(-21, s, 0);
53 5dc21454 2023-07-14 jrmu assert("-21", s);
54 5dc21454 2023-07-14 jrmu itoa(0, s, 0);
55 5dc21454 2023-07-14 jrmu assert("0", s);
56 5dc21454 2023-07-14 jrmu itoa(0, s, 5);
57 5dc21454 2023-07-14 jrmu assert(" 0", s);
58 5dc21454 2023-07-14 jrmu }