La función atoi() en C toma una string (que representa un número entero) como argumento y devuelve su valor de tipo int. Entonces, básicamente, la función se usa para convertir un argumento de string en un número entero.
Sintaxis:
int atoi(const char strn)
Parámetros: la función acepta un parámetro strn que se refiere al argumento de string que se necesita convertir en su equivalente entero.
Valor devuelto: si strn es una entrada válida, la función devuelve el número entero equivalente para el número de string pasado. Si no tiene lugar una conversión válida, la función devuelve cero.
Ejemplo:
C++
#include <bits/stdc++.h> using namespace std; int main() { int val; char strn1[] = "12546"; val = atoi(strn1); cout <<"String value = " << strn1 << endl; cout <<"Integer value = " << val << endl; char strn2[] = "GeeksforGeeks"; val = atoi(strn2); cout <<"String value = " << strn2 << endl; cout <<"Integer value = " << val <<endl; return (0); } // This code is contributed by shivanisinghss2110
C
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int val; char strn1[] = "12546"; val = atoi(strn1); printf("String value = %s\n", strn1); printf("Integer value = %d\n", val); char strn2[] = "GeeksforGeeks"; val = atoi(strn2); printf("String value = %s\n", strn2); printf("Integer value = %d\n", val); return (0); }
String value = 12546 Integer value = 12546 String value = GeeksforGeeks Integer value = 0
Complejidad de tiempo: O(n) donde n es la longitud de la string
Espacio Auxiliar: O(1)
Ahora comprendamos varias formas en las que uno puede crear su propia función atoi() compatible con varias condiciones:
Enfoque 1: a continuación se muestra una implementación simple de la conversión sin considerar ningún caso especial.
- Inicializar el resultado como 0.
- Comience desde el primer carácter y actualice el resultado para cada carácter.
- Para cada carácter actualice la respuesta como resultado = resultado * 10 + (s[i] – ‘0’)
C++
// A simple C++ program for // implementation of atoi #include <bits/stdc++.h> using namespace std; // A simple atoi() function int myAtoi(char* str) { // Initialize result int res = 0; // Iterate through all characters // of input string and update result // take ASCII character of corresponding digit and // subtract the code from '0' to get numerical // value and multiply res by 10 to shuffle // digits left to update running total for (int i = 0; str[i] != '\0'; ++i) res = res * 10 + str[i] - '0'; // return result. return res; } // Driver code int main() { char str[] = "89789"; // Function call int val = myAtoi(str); cout << val; return 0; } // This is code is contributed by rathbhupendra
C
// Program to implement atoi() in C #include <stdio.h> // A simple atoi() function int myAtoi(char* str) { // Initialize result int res = 0; // Iterate through all characters // of input string and update result // take ASCII character of corresponding digit and // subtract the code from '0' to get numerical // value and multiply res by 10 to shuffle // digits left to update running total for (int i = 0; str[i] != '\0'; ++i) res = res * 10 + str[i] - '0'; // return result. return res; } // Driver Code int main() { char str[] = "89789"; // Function call int val = myAtoi(str); printf("%d ", val); return 0; }
Java
// A simple Java program for // implementation of atoi class GFG { // A simple atoi() function static int myAtoi(String str) { // Initialize result int res = 0; // Iterate through all characters // of input string and update result // take ASCII character of corresponding digit and // subtract the code from '0' to get numerical // value and multiply res by 10 to shuffle // digits left to update running total for (int i = 0; i < str.length(); ++i) res = res * 10 + str.charAt(i) - '0'; // return result. return res; } // Driver code public static void main(String[] args) { String str = "89789"; // Function call int val = myAtoi(str); System.out.println(val); } } // This code is contributed by PrinciRaj1992
Python3
# Python program for implementation of atoi # A simple atoi() function def myAtoi(string): res = 0 # Iterate through all characters of # input string and update result for i in range(len(string)): res = res * 10 + (ord(string[i]) - ord('0')) return res # Driver program string = "89789" # Function call print (myAtoi(string)) # This code is contributed by BHAVYA JAIN
C#
// A simple C# program for implementation // of atoi using System; class GFG { // A simple atoi() function static int myAtoi(string str) { int res = 0; // Initialize result // Iterate through all characters // of input string and update result // take ASCII character of corresponding digit and // subtract the code from '0' to get numerical // value and multiply res by 10 to shuffle // digits left to update running total for (int i = 0; i < str.Length; ++i) res = res * 10 + str[i] - '0'; // return result. return res; } // Driver code public static void Main() { string str = "89789"; // Function call int val = myAtoi(str); Console.Write(val); } } // This code is contributed by Sam007.
Javascript
<script> // A simple Javascript program for // implementation of atoi // A simple atoi() function function myAtoi(str) { // Initialize result let res = 0; // Iterate through all characters // of input string and update result // take ASCII character of corresponding digit and // subtract the code from '0' to get numerical // value and multiply res by 10 to shuffle // digits left to update running total for (let i = 0; i < str.length; ++i) res = res * 10 + str[i].charCodeAt(0) - '0'.charCodeAt(0); // return result. return res; } // Driver code let str = "89789"; // Function call let val = myAtoi(str); document.write(val); // This code is contributed by rag2127 </script>
89789
Complejidad de tiempo: O(n) donde n es la longitud de la string str.
Enfoque 2: esta implementación maneja los números negativos. Si el primer carácter es ‘-‘, almacene el signo como negativo y luego convierta el resto de la string en número utilizando el enfoque anterior mientras multiplica el signo con él.
C++
// A C++ program for // implementation of atoi #include <bits/stdc++.h> using namespace std; // A simple atoi() function int myAtoi(char* str) { // Initialize result int res = 0; // Initialize sign as positive int sign = 1; // Initialize index of first digit int i = 0; // If number is negative, // then update sign if (str[0] == '-') { sign = -1; // Also update index of first digit i++; } // Iterate through all digits // and update the result for (; str[i] != '\0'; i++) res = res * 10 + str[i] - '0'; // Return result with sign return sign * res; } // Driver code int main() { char str[] = "-123"; // Function call int val = myAtoi(str); cout << val; return 0; } // This is code is contributed by rathbhupendra
C
// A C program for // implementation of atoi #include <stdio.h> // A simple atoi() function int myAtoi(char* str) { // Initialize result int res = 0; // Initialize sign as positive int sign = 1; // Initialize index of first digit int i = 0; // If number is negative, // then update sign if (str[0] == '-') { sign = -1; // Also update index of first digit i++; } // Iterate through all digits // and update the result for (; str[i] != '\0'; ++i) res = res * 10 + str[i] - '0'; // Return result with sign return sign * res; } // Driver code int main() { char str[] = "-123"; // Function call int val = myAtoi(str); printf("%d ", val); return 0; }
Java
// Java program for // implementation of atoi class GFG { // A simple atoi() function static int myAtoi(char[] str) { // Initialize result int res = 0; // Initialize sign as positive int sign = 1; // Initialize index of first digit int i = 0; // If number is negative, then // update sign if (str[0] == '-') { sign = -1; // Also update index of first // digit i++; } // Iterate through all digits // and update the result for (; i < str.length; ++i) res = res * 10 + str[i] - '0'; // Return result with sign return sign * res; } // Driver code public static void main(String[] args) { char[] str = "-123".toCharArray(); // Function call int val = myAtoi(str); System.out.println(val); } } // This code is contributed by 29AjayKumar
Python3
# Python program for implementation of atoi # A simple atoi() function def myAtoi(string): res = 0 # initialize sign as positive sign = 1 i = 0 # if number is negative then update sign if string[0] == '-': sign = -1 i += 1 # Iterate through all characters # of input string and update result for j in range(i, len(string)): res = res*10+(ord(string[j])-ord('0')) return sign * res # Driver code string = "-123" # Function call print (myAtoi(string)) # This code is contributed by BHAVYA JAIN
C#
// C# program for implementation of atoi using System; class GFG { // A simple atoi() function static int myAtoi(string str) { // Initialize result int res = 0; // Initialize sign as positive int sign = 1; // Initialize index of first digit int i = 0; // If number is negative, then // update sign if (str[0] == '-') { sign = -1; // Also update index of first // digit i++; } // Iterate through all digits // and update the result for (; i < str.Length; ++i) res = res * 10 + str[i] - '0'; // Return result with sign return sign * res; } // Driver code public static void Main() { string str = "-123"; // Function call int val = myAtoi(str); Console.Write(val); } } // This code is contributed by Sam007.
Javascript
<script> // JavaScript program for implementation of atoi // A simple atoi() function function myAtoi(str) { // Initialize result var res = 0; // Initialize sign as positive var sign = 1; // Initialize index of first digit var i = 0; // If number is negative, then // update sign if (str[0] == '-') { sign = -1; // Also update index of first // digit i++; } // Iterate through all digits // and update the result for (; i < str.length; ++i) res = res * 10 + str[i].charCodeAt(0) - '0'.charCodeAt(0); // Return result with sign return sign * res; } // Driver code var str = "-129"; var val=myAtoi(str); document.write(val); </script> <! --This code is contributed by nirajgusain5 -->
-123
Complejidad de tiempo: O(n) donde n es la longitud de la string str.
Enfoque 3: Es necesario manejar los casos de cuatro esquinas:
- Descarta todos los espacios en blanco iniciales
- Signo del número
- Desbordamiento
- Entrada inválida
Para eliminar los espacios en blanco iniciales, ejecute un ciclo hasta que se alcance un carácter del dígito. Si el número es mayor o igual a INT_MAX/10. Luego devuelva INT_MAX si el signo es positivo y devuelva INT_MIN si el signo es negativo. Los otros casos se manejan en enfoques anteriores.
Ejecución en seco:
A continuación se muestra la implementación del enfoque anterior:
C++
// A simple C++ program for // implementation of atoi #include <bits/stdc++.h> using namespace std; int myAtoi(const char* str) { int sign = 1, base = 0, i = 0; // if whitespaces then ignore. while (str[i] == ' ') { i++; } // sign of number if (str[i] == '-' || str[i] == '+') { sign = 1 - 2 * (str[i++] == '-'); } // checking for valid input while (str[i] >= '0' && str[i] <= '9') { // handling overflow test case if (base > INT_MAX / 10 || (base == INT_MAX / 10 && str[i] - '0' > 7)) { if (sign == 1) return INT_MAX; else return INT_MIN; } base = 10 * base + (str[i++] - '0'); } return base * sign; } // Driver Code int main() { char str[] = " -123"; // Functional Code int val = myAtoi(str); cout <<" "<< val; return 0; } // This code is contributed by shivanisinghss2110
C
// A simple C++ program for // implementation of atoi #include <stdio.h> #include <limits.h> int myAtoi(const char* str) { int sign = 1, base = 0, i = 0; // if whitespaces then ignore. while (str[i] == ' ') { i++; } // sign of number if (str[i] == '-' || str[i] == '+') { sign = 1 - 2 * (str[i++] == '-'); } // checking for valid input while (str[i] >= '0' && str[i] <= '9') { // handling overflow test case if (base > INT_MAX / 10 || (base == INT_MAX / 10 && str[i] - '0' > 7)) { if (sign == 1) return INT_MAX; else return INT_MIN; } base = 10 * base + (str[i++] - '0'); } return base * sign; } // Driver Code int main() { char str[] = " -123"; // Functional Code int val = myAtoi(str); printf("%d ", val); return 0; } // This code is contributed by Yogesh shukla.
Java
// A simple Java program for // implementation of atoi class GFG { static int myAtoi(char[] str) { int sign = 1, base = 0, i = 0; // if whitespaces then ignore. while (str[i] == ' ') { i++; } // sign of number if (str[i] == '-' || str[i] == '+') { sign = 1 - 2 * (str[i++] == '-' ? 1 : 0); } // checking for valid input while (i < str.length && str[i] >= '0' && str[i] <= '9') { // handling overflow test case if (base > Integer.MAX_VALUE / 10 || (base == Integer.MAX_VALUE / 10 && str[i] - '0' > 7)) { if (sign == 1) return Integer.MAX_VALUE; else return Integer.MIN_VALUE; } base = 10 * base + (str[i++] - '0'); } return base * sign; } // Driver code public static void main(String[] args) { char str[] = " -123".toCharArray(); // Function call int val = myAtoi(str); System.out.printf("%d ", val); } } // This code is contributed by 29AjayKumar
Python3
# A simple Python3 program for # implementation of atoi import sys def myAtoi(Str): sign, base, i = 1, 0, 0 # If whitespaces then ignore. while (Str[i] == ' '): i += 1 # Sign of number if (Str[i] == '-' or Str[i] == '+'): sign = 1 - 2 * (Str[i] == '-') i += 1 # Checking for valid input while (i < len(Str) and Str[i] >= '0' and Str[i] <= '9'): # Handling overflow test case if (base > (sys.maxsize // 10) or (base == (sys.maxsize // 10) and (Str[i] - '0') > 7)): if (sign == 1): return sys.maxsize else: return -(sys.maxsize) base = 10 * base + (ord(Str[i]) - ord('0')) i += 1 return base * sign # Driver Code Str = list(" -123") # Functional Code val = myAtoi(Str) print(val) # This code is contributed by divyeshrabadiya07
C#
// A simple C# program for implementation of atoi using System; class GFG { static int myAtoi(char[] str) { int sign = 1, Base = 0, i = 0; // if whitespaces then ignore. while (str[i] == ' ') { i++; } // sign of number if (str[i] == '-' || str[i] == '+') { sign = 1 - 2 * (str[i++] == '-' ? 1 : 0); } // checking for valid input while ( i < str.Length && str[i] >= '0' && str[i] <= '9') { // handling overflow test case if (Base > int.MaxValue / 10 || (Base == int.MaxValue / 10 && str[i] - '0' > 7)) { if (sign == 1) return int.MaxValue; else return int.MinValue; } Base = 10 * Base + (str[i++] - '0'); } return Base * sign; } // Driver code public static void Main(String[] args) { char[] str = " -123".ToCharArray(); int val = myAtoi(str); Console.Write("{0} ", val); } } // This code is contributed by 29AjayKumar
Javascript
<script> // A simple JavaScript program for // implementation of atoi function myAtoi(str) { var sign = 1, base = 0, i = 0; // if whitespaces then ignore. while (str[i] == ' ') { i++; } // sign of number if (str[i] == '-' || str[i] == '+') { sign = 1 - 2 * (str[i++] == '-'); } // checking for valid input while (str[i] >= '0' && str[i] <= '9') { // handling overflow test case if (base > Number.MAX_VALUE/ 10 || (base == Number.MAX_VALUE / 10 && str[i] - '0' > 7)) { if (sign == 1) return Number.MAX_VALUE; else return Number.MAX_VALUE; } base = 10 * base + (str[i++] - '0'); } return base * sign; } // Driver code var str = " -123"; // Function call var val = myAtoi(str); document.write(" ", val); // This code is contributed by shivanisinghss2110 </script>
-123
Análisis de complejidad para todos los enfoques anteriores:
- Complejidad temporal: O(n).
Solo se necesita un recorrido de la string. - Complejidad espacial: O(1).
Como no se requiere espacio adicional.
Programa recursivo para atoi() .
Ejercicio:
Escriba su won atof() que toma una string (que representa un valor de punto flotante) como argumento y devuelve su valor como doble.
Este artículo ha sido compilado por Abhay Rathi . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo y enviarlo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA