[ create a new paste ] login | about

Link: http://codepad.org/C31is7BD    [ raw code | output | fork ]

mohit_at_codepad - C, pasted on Jul 3:
// Implement your own atoi
#include <stdio.h>
#include <assert.h>
#include <ctype.h>
#include <limits.h>
#include <stdlib.h>

int atoi_(const char *cp) {
  int sign =  1;
  unsigned int ans = 0;
  if(cp) {
    while(*cp == ' ') ++cp;
    if(cp[0] == '-') ++cp, sign = -1;
    else if(cp[0] == '+') ++cp;
    while(*cp != '\0') {
      if( !isdigit(*cp) ) break;
      ans = ans * 10 + (*cp++ - '0');
      if( ans > INT_MAX ) return (-1 == sign) ? INT_MIN : INT_MAX;
    }
  }
  return (int)ans * sign;
}

int main() {
#define TEST(X) printf("Input = " #X ", expected = %d, actual = %d\n", atoi(X), atoi_(X))
  TEST("0");
  TEST("1");
  TEST("-1");
  TEST("1234");
  TEST("-1234");
  TEST("2147483647");
  TEST("-2147483647");
  TEST("2147483648");
  TEST("-2147483648");
  TEST("2147483649");
  TEST("-2147483649");
  TEST("214-4");
  TEST("-21mohit648");
  TEST("");
  TEST("-");
  TEST("-0");
  TEST("+42");
  TEST("                                    42");
  TEST("                                    +42");
  TEST("                                    +42E35");
  printf("Input = %s, expected = %s, actual = %d\n", NULL, NULL, atoi_(NULL));
  return 0;
}


Output:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Input = "0", expected = 0, actual = 0
Input = "1", expected = 1, actual = 1
Input = "-1", expected = -1, actual = -1
Input = "1234", expected = 1234, actual = 1234
Input = "-1234", expected = -1234, actual = -1234
Input = "2147483647", expected = 2147483647, actual = 2147483647
Input = "-2147483647", expected = -2147483647, actual = -2147483647
Input = "2147483648", expected = 2147483647, actual = 2147483647
Input = "-2147483648", expected = -2147483648, actual = -2147483648
Input = "2147483649", expected = 2147483647, actual = 2147483647
Input = "-2147483649", expected = -2147483648, actual = -2147483648
Input = "214-4", expected = 214, actual = 214
Input = "-21mohit648", expected = -21, actual = -21
Input = "", expected = 0, actual = 0
Input = "-", expected = 0, actual = 0
Input = "-0", expected = 0, actual = 0
Input = "+42", expected = 42, actual = 42
Input = "                                    42", expected = 42, actual = 42
Input = "                                    +42", expected = 42, actual = 42
Input = "                                    +42E35", expected = 42, actual = 42
Input = (null), expected = (null), actual = 0


Create a new paste based on this one


Comments: