¿Cómo se analiza un número entero a string(char* || char[])
en C? ¿Hay un equivalente al método Integer.parseInt(String)
de Java en C?Analizando entero a la cadena C
Respuesta
Si desea convertir un entero en cadena, intente con la función snprintf()
.
Si desea convertir una cadena a un número entero, intente con la función sscanf()
o atoi()
o atol()
.
Si desea verificar los errores, strtol o strtoul serían mejores que sscanf, atoi o atol. –
'atoi' ha quedado obsoleto, no recomendaría su uso. – jacwah
La función Java parseInt()
analiza una cadena para devolver un número entero. Una función C equivalente es atoi()
. Sin embargo, esto no parece coincidir con la primera parte de su pregunta. ¿Desea convertir de un entero a una cadena, o de una cadena a un número entero?
También puede comprobar a cabo la función atoi()
(ASCII a entero) y es atol
parientes, y atoll
, etc.
Además, hay funciones que hacen a la inversa, así, a saber itoa()
y co.
Para convertir un int a una cadena:
int x = -5;
char buffer[50];
sprintf(buffer, "%d", x);
También puede hacerlo en dobles:
double d = 3.1415;
sprintf(buffer, "%f", d);
para convertir una cadena a un int:
int x = atoi("-43");
Ver http://www.acm.uiuc.edu/webmonkeys/book/c_guide/ para la documentación de estas funciones.
Hay un posible desbordamiento de búfer en su código, aunque no deseo calcular cuántos enteros de bits necesita para que suceda. Use snprintf(). – aib
Para tener un desbordamiento de búfer allí, con espacio para 50 caracteres, necesitará tener enteros de 163 bits, asumiendo el caso positivo y la presencia de terminación nula. >>> Math.log (10 ** 49) /math.log (2) 162.77447664948076 – Arafangion
Suena como que tiene una cadena y desea convertir en un entero, a juzgar por la mención de parseInt
, aunque no es muy claro a partir de la pregunta ...
Para ello, utilice strtol
. Esta función es marginalmente más complicada que atoi
, pero a cambio proporciona una indicación más clara de las condiciones de error, porque puede completar un puntero (que proporciona la persona que llama) con la dirección del primer carácter que lo confundió. La persona que llama puede luego examinar el personaje ofensivo y decidir si la cadena fue válida o no. atoi
, por el contrario, simplemente devuelve 0 si se perdió, lo que no siempre es útil, aunque si está satisfecho con este comportamiento, entonces también podría usarlo.
A continuación se muestra un ejemplo de uso de strtol
. La comprobación del error es muy simple: si el primer carácter no reconocido no era el '\x0'
que termina la cadena, entonces se considera que la cadena no contiene un int válido.
int ParseInt(const char *s,int *i)
{
char *ep;
long l;
l=strtol(s,&ep,0);
if(*ep!=0)
return 0;
*i=(int)l;
return 1;
}
Esta función rellena en * i con el número entero y devuelve 1, si la cadena contiene un número entero válido. De lo contrario, devuelve 0.
Dato curioso, las páginas man para atoi dicen que es equivalente a: (int) strol (str, (char * *) NULL, 10) –
Es posible que desee echar un vistazo a la solución compatible en this site.
Usted puede tratar de:
int intval;
String stringval;
//assign a value to intval here.
stringval = String(intval);
que debe hacer el truco.
La pregunta es para C; esto no funcionará – iamnotmaynard
Esta no es una solución óptima. Esta es mi solución debido a las múltiples restricciones, por lo tanto, si tuviera recursos limitados en función de las pautas de su curso/instructor, podría ser una buena opción para usted.
También tenga en cuenta que esta es una fracción de mi propio implemento de proyecto, y tuve que leer en operandos, así como dígitos, así que usé getchars. De lo contrario, si sólo necesita enteros y ningún otro tipo de caracteres, me gusta usar esto:
int k;
while (scanf("%d", &k) == 1)
Las reglas hubo, conceptos específicos C "avanzados": no hay variables de cadena, no hay estructuras, no hay punteros, no hay métodos no cubierto, y el único que incluimos que nos permitieron fue #include
Así que sin métodos simples como atoi() disponible o cualquier variable String para usar, elegí simplemente forzarlo brutalmente.
1: leer caracteres en el uso de getchar (se prohibió el uso de fgets). return 1 (exit status 1) si hay un caracter no válido. Para su problema basado en parseInt en Java 1 11 13 es válido pero 1 11 1a no es válido, por lo que para todos los valores tenemos una "cadena" válida si todos los caracteres están 0-9 ignorando espacios en blanco.
2: convertir el valor ASCII de un char a su valor entero (por ejemplo, 48 => 0.)
3: utilizar un val variable para almacenar un int tal que para cada caracter en una "subcadena" hay es un dígito entero correspondiente. es decir, "1234" => 1234 agrega esto a una matriz int y establece val en 0 para reutilizar.
El código siguiente muestra este algoritmo:
int main() {
int i, c;
int size = 0;
int arr[10]; //max number of ints yours may differ
int val = 0;
int chars[1200]; //arbitrary size to fit largest "String"
int len = 0;
//Part 1: read in valid integer chars from stdin
while((c = getchar()) != EOF && (c < 58 && c > 47)) {
chars[len] = c;
len++;
}
//Part 2: Convert atoi manually. concat digits of multi digit integers and
// append to an int[]
for(i = 0; i < len; i++){
for(i = 0; i < len; i++){
if(chars[i] > 47 && chars[i] < 58){
while((chars[i] > 47 && chars[i] < 58)){
if(chars[i] == 48)
c = 0;
if(chars[i] == 49)
c = 1;
if(chars[i] == 50)
c = 2;
if(chars[i] == 51)
c = 3;
if(chars[i] == 52)
c = 4;
if(chars[i] == 53)
c = 5;
if(chars[i] == 54)
c = 6;
if(chars[i] == 55)
c = 7;
if(chars[i] ==56)
c = 8;
if(chars[i] == 57)
c = 9;
val = val*10 + c;
i++;
}
arr[size] = val;
size++;
if(size > 10) //we have a check to ensure size stays in bounds
return 1;
val = 0;
}
//Print: We'll make it a clean, organized "toString" representation
printf("[");
for(i = 0; i < size-1; i++){
printf("%d, ", arr[i]);
}
printf("%d]", arr[i];
return 0;
Una vez más, este es el método de fuerza bruta, pero en casos como el mío, donde no es posible utilizar los conceptos de método la gente usa profesionalmente o varios instrumentos C99, este puede ser lo que estás buscando.
- 1. Analizando la cadena "009" como un entero en javascript?
- 2. convertir cadena a entero en C++
- 3. Analizando Expresiones Condicionales a la Cadena
- 4. Cómo convertir cadena a entero en C#
- 5. groovy convert Cadena "1,503" a Entero
- 6. Analizando C a Ocaml
- 7. Analizando una expresión de cadena C# LINQ
- 8. Analizando una cadena
- 9. Entero a la dirección IP - C
- 10. Analizando una cadena SQL
- 11. Conversión de cadena a entero
- 12. Analizando la cadena JSON al objeto .NET
- 13. ¿Convertir cadena a entero/flotar en Haskell?
- 14. C# cadena de análisis "0" al entero
- 15. Convertir cadena/caracteres a entero en python
- 16. Cómo imprimir correctamente el entero y la cadena en c?
- 17. Analizando cadena multibyte en PHP
- 18. Analizando archivos .plist a XML simple C#
- 19. Analizando una cadena en C#; ¿hay una manera más limpia?
- 20. Analizando el código C# (como cadena) e insertando métodos adicionales
- 21. cadena Convertir a entero en el mapa()
- 22. Rails ¿Migración para convertir cadena a entero?
- 23. cadena de transmisión a entero - Postgres
- 24. convierte una cadena a un entero
- 25. Byte a entero en C#
- 26. MS SQL Server - Convierte la cadena HEX a entero
- 27. Convertir cadena a entero en XSLT 1.0
- 28. convertido matriz de cadena a entero gama
- 29. Ruby - Conversión de entero a cadena
- 30. Cómo convertir cadena a entero en UNIX
Creo que lo obtuviste al revés: int Integer.parseInt (String)? –