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:
|
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
|
|