2012-08-26 21 views
6

Jak mogę przekonwertować n-tą ciąg znaków na liczbę? Mam długą liczbę wyrażoną jako napis i chciałbym ją utworzyć, gdzie każda postać byłaby oddzielną cyfrą. Próbowałem z następującym kodem:nth znak ciągu znaków na 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; 
} 

Ale to nie działa.

Odpowiedz

9

Jak o:

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

czy może:

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

Tak, to jest to. Dziękuję Ci. Czy mógłbyś wyjaśnić, co robi "-" 0 ""? – user1626154

+3

"0" to 48 w [ASCII] (http://www.asciitable.com/index/asciifull.gif), natomiast "1" to 49, więc "1" - "0" to proste odejmowanie matematyczne, ' 49 - 48', co daje 1. To samo dotyczy wszystkich innych cyfr. – jweyrich

+0

@ user1626154 Konwertuje reprezentację ASCII liczby na jej dziesiętny odpowiednik. "0" wynosi 48 w systemie dziesiętnym, więc odjęcie "0" daje wartość dziesiętną 0, i tak dalej dla pozostałych cyfr. – DaV

0

Spróbuj tego:

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

Używaj standardowych funkcji zamiast atoi – Nahiyan

Powiązane problemy