2012-08-26 19 views
6

मैं स्ट्रिंग से संख्या के एनएच चरित्र को कैसे परिवर्तित कर सकता हूं? मेरे पास स्ट्रिंग के रूप में एक लंबी संख्या व्यक्त की गई है और मैं इसे एक सरणी बनाना चाहता हूं, जहां प्रत्येक चरित्र अलग संख्या होगी। मैंने कोड के बाद के टुकड़े के साथ प्रयास किया है:स्ट्रिंग के एनएच चरित्र 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; 
} 

लेकिन यह काम नहीं करता है।

उत्तर

9

के बारे में कैसे:

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

या हो सकता है:

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

हाँ, यह बात है। धन्यवाद। क्या आप कृपया बता सकते हैं कि "-" 0 क्या करता है? – user1626154

+3

'0' 48 [ASCII] में है (http://www.asciitable.com/index/asciifull.gif), जबकि '1' 49 है, इसलिए '1' - '0' एक साधारण गणित घटाव है, ' 49 - 48', जिसके परिणामस्वरूप 1 है। यह अन्य सभी अंकों पर लागू होता है। – jweyrich

+0

@ user1626154 यह संख्या के ASCII प्रतिनिधित्व को दशमलव दशमलव के रूप में परिवर्तित करता है। '0' दशमलव में 48 है, इसलिए '0' घटाकर दशमलव मान 0 देता है, और अन्य अंकों के लिए भी। – DaV

0

इस प्रयास करें:

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

atoi के बजाय मानक कार्यों का उपयोग करें – Nahiyan

संबंधित मुद्दे