2012-08-26 17 views
6

¿Cómo puedo convertir el n-ésimo carácter de la cadena en número? Tengo un número largo expresado como cadena y me gustaría hacer una matriz de él, donde cada carácter sería un número separado. Lo he intentado con el fragmento de código seguido:n-ésimo carácter de la cadena int

#include <iostream> 
#include <string> 
#include <sstream> 
using namespace std; 

int main() 
{ 
    string str ="73167176531330624919225119674426574742355349194934969835203127745063262395783180169848018"; 
    int ints[1000] = {0}; 

    for (int i = 0; i < str.size(); i++) 
    { 
     istringstream ss(str[i]); 
     ss >> ints[i]; 
    } 

    cout << ints[9] << endl; 

    return 0; 
} 

Pero no funciona.

Respuesta

9

¿Qué tal:

for (int i = 0; i < str.size(); i++) 
    if (isdigit(str[i])) 
     ints[i] = str[i] - '0'; 

O tal vez:

for (string::const_iterator it = str.begin(); 
    it != str.end(); it++) 
     if (isdigit(*it)) 
      ints[i] = *it - '0'; 
+1

Sí, eso es todo. Gracias. ¿Podría explicar qué hace "- '0'" hacer? – user1626154

+3

'0' es 48 en [ASCII] (http://www.asciitable.com/index/asciifull.gif), mientras que '1' es 49, por lo que '1' - '0' es una simple resta matemática, ' 49 - 48', que resulta en 1. Lo mismo se aplica a todos los demás dígitos. – jweyrich

+0

@ user1626154 convierte la representación ASCII del número a su equivalente decimal. '0' es 48 en decimal, por lo que al restar '0' se obtiene el valor decimal 0, y así sucesivamente para los otros dígitos. – DaV

0

Prueba esto:

char a[2]; 
a[1] = '\0'; 
for (size_t i = 0; i < str.size(); i++) { 
    a[0] = str[i]; 
    ints[i] = atoi(a); 
} 
+0

Usar funciones estándar en lugar de atoi – Nahiyan