Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- using namespace std;
- static const char MINUS = '-';
- char* my_trimLeft(const char* src);
- int my_atoi(const char* src);
- int main()
- {
- cout << my_atoi("bjk vvh-)(-20856--fbhcfr f");
- cin.get();
- return 0;
- }
- // Implement the function, that transforms string into integer.
- int my_atoi(const char* src)
- {
- bool isNegative = false;
- char* str = my_trimLeft(src);
- if(str == NULL)
- {
- return EXIT_FAILURE; // input error, terminating
- }
- if(str[0] == MINUS)
- {
- isNegative = true;
- str++;
- }
- int result = 0;
- int digit = 1;
- const int DIGIT_DIFFERENCE = 10;
- const char ZERO_SYMBOL = '0';
- for(int i = (strlen(str)-1); i >= 0; i--)
- {
- result = result + (digit * int(str[i]-ZERO_SYMBOL));
- digit = digit * DIGIT_DIFFERENCE;
- }
- if(isNegative == false)
- {
- delete [] str;
- return result;
- }
- else
- {
- str--;
- delete [] str;
- return -result;
- }
- }
- char* my_trimLeft(const char* src)
- {
- if(strlen(src) == 0) // there's no string
- {
- return NULL;
- }
- char* resultStr = new char[strlen(src)];
- int srcIndex = 0;
- int resultIndex = 0;
- while( (0 == isdigit(src[srcIndex]))
- &&
- (srcIndex < strlen(src))
- )
- {
- if ((src[srcIndex] == MINUS) && (0 != isdigit(src[srcIndex+1])))
- {
- resultStr[resultIndex] = MINUS;
- resultIndex++;
- }
- srcIndex++;
- }
- // now srcIndex indexes the first numeric in the string
- while( (0 != isdigit(src[srcIndex]))
- &&
- (srcIndex < strlen(src))
- )
- {
- resultStr[resultIndex] = src[srcIndex];
- resultIndex++;
- srcIndex++;
- }
- resultStr[resultIndex] = '\0';
- if(resultIndex == 0) // no numerics in the string
- {
- return NULL;
- }
- return resultStr;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement