स्ट्रिंग को int C++ में बदलें




string (8)

इस प्रश्न का उत्तर यहां दिया गया है:

बस एक त्वरित सवाल है। मैंने इंटरनेट के चारों ओर बहुत कुछ देखा है और मुझे कुछ समाधान मिल गए हैं लेकिन उनमें से कोई भी अभी तक काम नहीं कर पाया है। एक स्ट्रिंग को एक int में कनवर्ट करना चाहते हैं और मेरा मतलब ASCII कोड नहीं है।

एक त्वरित रन-डाउन के लिए, हम एक स्ट्रिंग के रूप में समीकरण में पारित होते हैं। हम इसे तोड़ने, इसे सही ढंग से प्रारूपित करने और रैखिक समीकरणों को हल करने के लिए हैं। अब, यह कहकर, मैं एक स्ट्रिंग को एक int में परिवर्तित करने में सक्षम नहीं हूं।

मुझे पता है कि स्ट्रिंग या तो प्रारूप (-5) या (25) आदि में होगी, इसलिए यह निश्चित रूप से एक int है। लेकिन हम इसे एक स्ट्रिंग से कैसे निकाल सकते हैं?

एक तरीका मैं सोच रहा था कि स्ट्रिंग के माध्यम से लूप के लिए चल रहा है, एक अंक की जांच करें, उसके बाद सभी अंकों को निकालें और फिर देखें कि क्या कोई अग्रणी '-' है, यदि वहां है, तो int को गुणा करें - 1।

यद्यपि ऐसी छोटी समस्या के लिए जटिल लगता है। कोई विचार?


एक और आसान तरीका है: मान लें कि आपके पास c='4' जैसे चरित्र हैं इसलिए आप इन चरणों में से एक कर सकते हैं:

पहला: int q

q=(int) c ; (q is now 52 in ascii table ) . q=q-48; remember that adding 48 to digits is their ascii code .

दूसरा तरीका:

q=c-'0'; the same , character '0' means 48


माना जाता है कि मेरा समाधान नकारात्मक पूर्णांक के लिए काम नहीं करेगा, लेकिन यह इंटीग्रेट युक्त इनपुट टेक्स्ट से सभी सकारात्मक पूर्णांक निकाल देगा। यह numeric_only लोकेल का उपयोग करता है:

int main() {
        int num;
        std::cin.imbue(std::locale(std::locale(), new numeric_only()));
        while ( std::cin >> num)
             std::cout << num << std::endl;
        return 0;
}

इनपुट टेक्स्ट:

 the format (-5) or (25) etc... some text.. and then.. 7987...78hjh.hhjg9878

आउटपुट पूर्णांक:

 5
25
7987
78
9878

कक्षा numeric_only के रूप में परिभाषित किया गया है:

struct numeric_only: std::ctype<char> 
{
    numeric_only(): std::ctype<char>(get_table()) {}

    static std::ctype_base::mask const* get_table()
    {
        static std::vector<std::ctype_base::mask> 
            rc(std::ctype<char>::table_size,std::ctype_base::space);

        std::fill(&rc['0'], &rc[':'], std::ctype_base::digit);
        return &rc[0];
    }
};

पूरा ऑनलाइन डेमो: http://ideone.com/dRWSj


यह शायद ओवरकिल का थोड़ा सा है, लेकिन boost::lexical_cast<int>( theString ) को बहुत अच्छी तरह से काम करना चाहिए।


विंडोज़ में, आप इसका उपयोग कर सकते हैं:

const std::wstring hex = L"0x13";
const std::wstring dec = L"19";

int ret;
if (StrToIntEx(hex.c_str(), STIF_SUPPORT_HEX, &ret)) {
    std::cout << ret << "\n";
}
if (StrToIntEx(dec.c_str(), STIF_SUPPORT_HEX, &ret)) {
    std::cout << ret << "\n";
}

strtol , stringstream को आधार निर्दिष्ट करने की आवश्यकता है यदि आपको हेक्साडेसिमल की व्याख्या करने की आवश्यकता है।


सी ++ 11 में std::string से कई प्रकार के कुछ नए कन्वर्ट फ़ंक्शंस हैं।

तो इसके बजाय

atoi( str.c_str() )

आप उपयोग कर सकते हैं

std::stoi( str )

जहां str आपकी संख्या std::string

संख्याओं के सभी स्वादों के लिए संस्करण हैं: long stol(string) , float stof(string) , double stod(string) , ... http://en.cppreference.com/w/cpp/string/basic_string/stol देखें


स्ट्रिंग को एक पूर्णांक में बदलने के लिए atoi फ़ंक्शन का उपयोग करें:

string a = "25";

int b = atoi(a.c_str());

cplusplus.com/reference/clibrary/cstdlib/atoi


atoi एक अंतर्निहित फ़ंक्शन है जो एक स्ट्रिंग को एक पूर्णांक में परिवर्तित करता है, यह मानते हुए कि स्ट्रिंग एक पूर्णांक प्रतिनिधित्व के साथ शुरू होती है।

cplusplus.com/reference/clibrary/cstdlib/atoi


std::istringstream ss(thestring);
ss >> thevalue;

पूरी तरह से सही होने के लिए आप त्रुटि झंडे की जांच करना चाहेंगे।





int