int atoi(const char* str);
- The function first discards as many whitespace characters (as in isspace) as necessary until the first non-whitespace character is found. Then, starting from this character, takes an optional initial plus or minus sign followed by as many base-10 digits as possible, and interprets them as a numerical value.
- The string can contain additional characters after those that form the integral number, which are ignored and have no effect on the behavior of this function.
- If the first sequence of non-whitespace characters in str is not a valid integral number, or if no such sequence exists because either str is empty or it contains only whitespace characters, no conversion is performed and zero is returned.
The following is an attempt to implement the function in C.
int stringToInt(const char* input) { // C implementation
int ans = 0;
int sign = 1;
if (!input) {
return ans;
}
//Check for sign at the beginning
if ( (*input == '-' && (sign = -1) ) || (*input == '+') ) {
input++;
}
while (*input) {
//If the character is a digit, use it
if (*input >= '0' && *input <= '9') {
ans = ans * 10 + (*input - '0') ;
} else { // Return once a non-digit charcter is encountered
return ans * sign;
}
input++;
}
return ans * sign;
}
int stringToInt(std::string& input) { //C++ implementation
int ans = 0;
if (!input) {
return ans;
}
//store the string as an input string stream
std::istringstream iss(input);
//if the conversion fails or does not reach eof, the conversion is not a success
if ( (iss >> std::ws >> ans).fail() || !(iss >> std::ws).eof() ) {
//Throwing a custom exception
StringToIntException e("Illegal characters in string input");
throw e;
} else {
return ans;
}
}
No comments:
Post a Comment