C + + cambiando char a int

  • LILB811
  • Born
  • Born
  • No Avatar
  • Registrado: Sep 21, 2003
  • Mensajes: 2
  • Status: Offline

Nota Septiembre 21st, 2003, 1:20 pm

Sé cómo cambiar un char a un int atoi utilizando el (& variable). Si tengo una serie de caracteres llamado num [40] y quiero aprovechar cada uno de esos caracteres y convertirlos a un array de ints llamado num2 [40] ¿Cómo puedo ser capaz de hacer eso y tener en cada número?
  • Anonymous
  • Bot
  • No Avatar
  • Registrado: 25 Feb 2008
  • Mensajes: ?
  • Loc: Ozzuland
  • Status: Online

Nota Septiembre 21st, 2003, 1:20 pm

  • Bigwebmaster
  • Site Admin
  • Site Admin
  • Avatar de Usuario
  • Registrado: Dic 20, 2002
  • Mensajes: 8922
  • Loc: Seattle, WA & Phoenix, AZ
  • Status: Offline

Nota Septiembre 21st, 2003, 1:29 pm

Podría usted acaba de bucle a través de su gama y convertir cada char a un int atoi usando (y variable)?
Ozzu Hosting - Want your website on a fast server like Ozzu?
  • LILB811
  • Born
  • Born
  • No Avatar
  • Registrado: Sep 21, 2003
  • Mensajes: 2
  • Status: Offline

Nota Septiembre 21st, 2003, 1:38 pm

Intenté hacer como que bien, pero cuando corría el bucle en lugar de tomar un individuo char tomó todo junto. Cuando yo quería convertir a char [1], I Got char [1] y todo después de que, cuando yo sólo quería que el número uno.
  • Bigwebmaster
  • Site Admin
  • Site Admin
  • Avatar de Usuario
  • Registrado: Dic 20, 2002
  • Mensajes: 8922
  • Loc: Seattle, WA & Phoenix, AZ
  • Status: Offline

Nota Septiembre 21st, 2003, 2:31 pm

¿Puede mostrarme el código en la forma en que ha intentado hacer eso?
Ozzu Hosting - Want your website on a fast server like Ozzu?
  • RichB
  • Guru
  • Guru
  • Avatar de Usuario
  • Registrado: May 17, 2003
  • Mensajes: 1121
  • Loc: Boston
  • Status: Offline

Nota Septiembre 22nd, 2003, 1:10 am

atoi es una función que toma un puntero char constante (variable char array) y convierte la matriz char todo a su equivalente entero, así que si pasarle el nombre de la matriz con un índice determinado, es decir, num [1], este será tratado que, como un puntero al comienzo de la cadena (char array) y seguir adelante hasta que encuentra el puntero nulo. Si desea convertir cada caracteres individuales en la matriz de caracteres por separado creo que tendrá que utilizar en lugar de fundición.

El problema con esto es que cuando lanzas los caracteres individuales a ints obtendrá sus equivalentes de la tabla ASCII en lugar de una conversión directa a un número entero. Por ejemplo, cuando lanzas el carácter 1 a un resultado de la int 49, porque se que es el valor entero ASCII del dígito 1 en comparación con el entero normal 1.

Dado que los valores ASCII de los dígitos 1-9 están desactivados de 48 (0 es de 48, 9 es 57), puede corregir restando 48 cuando lanzas tus caracteres para ints. Obviamente, esto sólo funcionará si los caracteres en cuestión son los dígitos 1-9 lo que podría querer poner a prueba para que con una sentencia if.

Código: [ Select ]
#include <iostream>
#include <stdlib.h>
#include <string.h>

using namespace std;

int main(int argc, char *argv[])
{
 char num[] = "123456789";
 int length = strlen(num);
 int num2[length];

 for(int i=0; i<length; i++)
 {
  // cast to ints and subtract 48 to account for ascii values of digits
  num2[i] = (int)num[i] - 48;
 }
 
 for(int i=0; i<length; i++)
 {
  cout << num2[i];
 }
 system("PAUSE");    
 return 0;
}
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. using namespace std;
  5. int main(int argc, char *argv[])
  6. {
  7.  char num[] = "123456789";
  8.  int length = strlen(num);
  9.  int num2[length];
  10.  for(int i=0; i<length; i++)
  11.  {
  12.   // cast to ints and subtract 48 to account for ascii values of digits
  13.   num2[i] = (int)num[i] - 48;
  14.  }
  15.  
  16.  for(int i=0; i<length; i++)
  17.  {
  18.   cout << num2[i];
  19.  }
  20.  system("PAUSE");    
  21.  return 0;
  22. }
Free Programming Resources
  • RichB
  • Guru
  • Guru
  • Avatar de Usuario
  • Registrado: May 17, 2003
  • Mensajes: 1121
  • Loc: Boston
  • Status: Offline

Nota Septiembre 23rd, 2003, 12:15 pm

Tras un nuevo examen, no creo que un compromiso explícito emitidos es aún necesario. He intentado cambiar
num2 [i] = (int) num [i] - 48;
para
num2 [i] = num [i] - 48;
y aún funciona. He estado trabajando en java desde hace algún tiempo cuando un explícito emitidos se necesita para extraer el int valor de un tipo char, pero no parece ser necesario en este caso.
Free Programming Resources
  • dr_geek
  • Beginner
  • Beginner
  • Avatar de Usuario
  • Registrado: Jul 07, 2004
  • Mensajes: 62
  • Loc: london town
  • Status: Offline

Nota Septiembre 8th, 2004, 8:05 am

el más fácil, manera más segura y portátil es utilizar la biblioteca estándar:
Código: [ Select ]
#include <stdlib.h>
#include <string>
#include <iostream>
#include <algorithm>
#include <functional>
#include <vector>

using namespace std;

int main() {

 string num = "123456789"
 vector<int> num2;
 
 transform(num.begin(), num.end.(), num2.begin(),
  ptr_fun(atoi))

 copy(num2.begin(), num2.end(),
  ostream_iterator<int>(cout, ""));

 return 0;
}
  1. #include <stdlib.h>
  2. #include <string>
  3. #include <iostream>
  4. #include <algorithm>
  5. #include <functional>
  6. #include <vector>
  7. using namespace std;
  8. int main() {
  9.  string num = "123456789"
  10.  vector<int> num2;
  11.  
  12.  transform(num.begin(), num.end.(), num2.begin(),
  13.   ptr_fun(atoi))
  14.  copy(num2.begin(), num2.end(),
  15.   ostream_iterator<int>(cout, ""));
  16.  return 0;
  17. }
  • rmStar-Rf
  • Newbie
  • Newbie
  • No Avatar
  • Registrado: Sep 24, 2004
  • Mensajes: 5
  • Loc: Philippines
  • Status: Offline

Nota Septiembre 24th, 2004, 8:18 am

No creo que funcione. He intentado compilar usando g + +, que parecen no ver el transformar (). es que después de algunas pequeñas correcciones de sintaxis (coma).
  • rmStar-Rf
  • Newbie
  • Newbie
  • No Avatar
  • Registrado: Sep 24, 2004
  • Mensajes: 5
  • Loc: Philippines
  • Status: Offline

Nota Septiembre 25th, 2004, 2:57 am

He descubierto lo que es defectuoso con el atoi...consulte el código de abajo.

Código: [ Select ]
/**
* charConvert.cpp
* rmStar-Rf
*
* */

#include <iostream>
#include <cstdlib>
using namespace std;

int main( void )
{
    char num[ 10 ] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' };

    int num2[ 10 ];

    char aa; //needed as a temporary variable.
    for( int ii = 0; ii < 10; ii++ ){
        aa = num[ ii ]; //trick here!!
        num2[ ii ] = atoi( &aa ); //then here!!
    }

    cout << "integers (dyaraaaan!): ";
    for( int ii = 0; ii < 10; ii++ ){
        cout << num2[ ii ] << ", ";
    }
    cout << endl;

    return 0;
}
  1. /**
  2. * charConvert.cpp
  3. * rmStar-Rf
  4. *
  5. * */
  6. #include <iostream>
  7. #include <cstdlib>
  8. using namespace std;
  9. int main( void )
  10. {
  11.     char num[ 10 ] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' };
  12.     int num2[ 10 ];
  13.     char aa; //needed as a temporary variable.
  14.     for( int ii = 0; ii < 10; ii++ ){
  15.         aa = num[ ii ]; //trick here!!
  16.         num2[ ii ] = atoi( &aa ); //then here!!
  17.     }
  18.     cout << "integers (dyaraaaan!): ";
  19.     for( int ii = 0; ii < 10; ii++ ){
  20.         cout << num2[ ii ] << ", ";
  21.     }
  22.     cout << endl;
  23.     return 0;
  24. }


atoi () parece que sólo ver la ubicación apuntada por el primer elemento de la variable de tipo char (atoi se define como atoi (char *)). Así pues, usando num2 [ii] = atoi (& (num [ii])), siempre se busque la II-ésimo elemento como el primer carácter del número entero para mostrar una salida como:

1234567890, 234567890, etc ..

Utilizando un aa variable temporal anterior, se resuelve el problema!

Espero que esto resuelve el problema original. Creo dr_geek tiene un buen punto. dado que está utilizando C + + de todas formas, ¿por qué no se utiliza #<string> incluyen arreglos para su personaje?

Es muy fácil de manipular cadenas ya que usted tiene:
mySstring cadena = "1";
= miCadena miCadena + "2341";

, etc .. gif "alt =";)" title =" Wink "/>

más adelante, si usted necesita una representación de matriz de caracteres, usted puede tener
AA char = myString.c_str () [0];
como el primer elemento...

buena suerte!

[/ code]
  • m3kw
  • Born
  • Born
  • No Avatar
  • Registrado: Sep 11, 2011
  • Mensajes: 1
  • Status: Offline

Nota Septiembre 11th, 2011, 9:31 am

En caso de que todavía se preguntan la cuestión. Just go

int Temp = *(int *) (num + yourAddress);

así que si tienes num [0 a 4 como 0xaa, 0xbb, 0xcc, 0xdd.

entonces Temp será 0xaabbccdd; como entero.
  • spork
  • Brewmaster
  • Silver Member
  • Avatar de Usuario
  • Registrado: Sep 22, 2003
  • Mensajes: 6129
  • Loc: Seattle, WA
  • Status: Offline

Nota Septiembre 11th, 2011, 2:01 pm

Esta pregunta hace 8 años. Im theyve seguro que pasó.
The Beer Monocle. Classy.

Publicar Información

  • Total de mensajes en este tema: 11 mensajes
  • Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 209 invitados
  • No puede abrir nuevos temas en este Foro
  • No puede responder a temas en este Foro
  • No puede editar sus mensajes en este Foro
  • No puede borrar sus mensajes en este Foro
  • No puede enviar adjuntos en este Foro
 
 

© 2011 Unmelted, LLC. Ozzu® es una marca registrada de Unmelted, LLC