Advertisement
Shalfey

Modern atoi() example of using

Apr 19th, 2012
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.68 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. using namespace std;
  4. static const char MINUS = '-';
  5. char* my_trimLeft(const char* src);
  6. int my_atoi(const char*  src);
  7. int main()
  8. {
  9.     cout << my_atoi("bjk vvh-)(-20856--fbhcfr f");
  10.     cin.get();
  11.     return 0;
  12. }
  13. // Implement the function, that transforms string into integer.
  14. int my_atoi(const char*  src)
  15. {
  16.     bool isNegative = false;
  17.     char* str = my_trimLeft(src);
  18.     if(str == NULL)
  19.     {
  20.         return EXIT_FAILURE;            // input error, terminating
  21.     }
  22.     if(str[0] == MINUS)
  23.     {
  24.         isNegative = true;
  25.         str++;
  26.     }
  27.     int result = 0;
  28.     int digit = 1;
  29.     const int DIGIT_DIFFERENCE = 10;
  30.     const char ZERO_SYMBOL = '0';
  31.     for(int i = (strlen(str)-1); i >= 0; i--)
  32.     {
  33.         result = result + (digit * int(str[i]-ZERO_SYMBOL));
  34.         digit = digit * DIGIT_DIFFERENCE;
  35.     }
  36.     if(isNegative == false)
  37.     {
  38.         delete [] str;
  39.         return result;
  40.     }
  41.     else
  42.     {
  43.         str--;
  44.         delete [] str;
  45.         return -result;
  46.     }
  47. }
  48. char* my_trimLeft(const char* src)
  49. {
  50.     if(strlen(src) == 0)    // there's no string
  51.     {
  52.         return NULL;
  53.     }
  54.     char* resultStr = new char[strlen(src)];
  55.     int srcIndex = 0;
  56.     int resultIndex = 0;
  57.     while(  (0 == isdigit(src[srcIndex]))
  58.         &&
  59.             (srcIndex < strlen(src))
  60.         )
  61.     {
  62.         if ((src[srcIndex] == MINUS) && (0 != isdigit(src[srcIndex+1])))
  63.         {
  64.             resultStr[resultIndex] = MINUS;
  65.             resultIndex++;
  66.         }
  67.         srcIndex++;
  68.     }
  69.     // now srcIndex indexes the first numeric in the string
  70.     while(  (0 != isdigit(src[srcIndex]))
  71.         &&
  72.             (srcIndex < strlen(src))
  73.         )
  74.     {
  75.         resultStr[resultIndex] = src[srcIndex];
  76.         resultIndex++;
  77.         srcIndex++;
  78.     }
  79.     resultStr[resultIndex] = '\0';
  80.     if(resultIndex == 0)    // no numerics in the string
  81.     {
  82.         return NULL;
  83.     }
  84.     return resultStr;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement