parse float cast c string parsing int

float - string to int c++



Parsing Integer a String C (9)

¿Cómo se puede analizar un entero en la string(char* || char[]) en C? ¿Hay un equivalente al método Integer.parseInt(String) de Java en C?


La parseInt() Java 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 verificar la función atoi() (ascii a entero) y sus parientes, atol y atoll , etc.

Además, hay funciones que hacen lo contrario también, concretamente itoa() y co.


Esto se discute en las preguntas frecuentes C de Steve Summit.


Para convertir un int en una cadena:

int x = -5; char buffer[50]; sprintf( buffer, "%d", x );

También puedes hacerlo por dobles:

double d = 3.1415; sprintf( buffer, "%f", d );

Para convertir una cadena en un int:

int x = atoi("-43");

Vea http://www.acm.uiuc.edu/webmonkeys/book/c_guide/ para la documentación de estas funciones.


Parece que tienes un hilo y quieres convertirlo en un entero, a juzgar por la mención de parseInt , aunque no está del todo claro por la pregunta ...

Para hacer esto, usa 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 la persona que llama proporciona) 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á contento con este comportamiento, entonces también podría usarlo.

Un ejemplo de uso de strtol sigue. 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 * i con el entero y devuelve 1, si la cadena contiene un número entero válido. De lo contrario, devuelve 0.


Si desea convertir un entero en cadena, intente con la función snprintf() .

Si desea convertir una cadena en un entero, intente con la función sscanf() o atoi() o atol() .


Es posible que desee echar un vistazo a la solución compatible en este sitio .


Puedes probar:

int intval; String stringval; //assign a value to intval here. stringval = String(intval);

Eso debería hacer el truco.


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 del proyecto, y tuve que leer tanto en operandos como en dígitos, así que usé getchars. De lo contrario, si solo necesitas números enteros y ningún otro tipo de caracteres, me gusta usar esto:

int k; while (scanf("%d", &k) == 1)

Las reglas no eran conceptos C específicos, "avanzados": sin variables de cadena, sin estructuras, sin punteros, sin métodos no cubiertos, y la única inclusión que se nos permitió fue #include

Entonces, sin llamadas a 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ó Fgets). return 1 (estado de salida 1) si hay un carácter 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, entonces para todos los valores tenemos una "cadena" válida si todos los caracteres están 0-9 ignorando espacios en blanco.

2: convierte el valor ASCII de un carácter de caracteres a su valor entero (por ejemplo, 48 => 0)

3: utilice un valor variable para almacenar un int tal que para cada carácter en una "subcadena" haya un dígito entero correspondiente. es decir, "1234" => 1234 añaden esto a una matriz int y configuran val a 0 para su reutilización.

El siguiente código demuestra 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;

Nuevamente, este es el método de la fuerza bruta, pero en casos como el mío donde no se pueden usar los conceptos de métodos que las personas usan profesionalmente o varios implementos C99, esto puede ser lo que estás buscando.