दिलचस्प पोस्ट
क्या सेट-टाइमआउट बिना किसी विलंब के साथ ही फ़ंक्शन तुरंत क्रियान्वित करता है? Tkinter चर ट्रेस विधि कॉलबैक करने के लिए तर्क क्या हैं? एंड्रॉइड मैप्स एपीआई v2 MyLocation आइकन बदलें रेल पर रूबी: वैश्विक स्थिरांक को परिभाषित करने के लिए कहां? एक लोड संतुलन क्लस्टर में PHP सत्र – कैसे? अधिकतम राशि उपन्यासकार? वीडियो प्लेअर के साथ 360 स्टीरियोस्कोपिक वीडियो प्ले करें डीबग संस्करण का libc का उपयोग कैसे करें .NET में संसाधनों का निर्माण और उपयोग कैसे करें क्या यूआरएल पैरामीटर में जेसन को परिवर्तित करने के लिए कोई देशी फ़ंक्शन है? फोनगैप पर SQLite डेटाबेस आर में जीजीप्लोट 2 में अंकों को नियंत्रित करना? फोरट्रान: पूर्णांक * 4 बनाम पूर्णांक (4) बनाम पूर्णांक (प्रकार = 4) मैं jQuery के साथ एक तत्व का चयन कैसे कर सकता हूं? कैसे datagridview प्रोग्राम को नई पंक्ति में जोड़ने के लिए

स्ट्रिंग को Int सी ++ में परिवर्तित करें

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

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

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

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

ऐसा लगता है कि इस तरह की एक छोटी सी समस्या के लिए हालांकि थोड़ा जटिल है। कोई विचार?

Solutions Collecting From Web of "स्ट्रिंग को Int सी ++ में परिवर्तित करें"

सी ++ 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

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

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

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

 string a = "25"; int b = atoi(a.c_str()); 

http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/

Boost.Lexical_cast के बारे में क्या?

उनका उनका उदाहरण है:

निम्न उदाहरण कमांड लाइन तर्क को संख्यात्मक डेटा के अनुक्रम के रूप में मानता है:

 int main(int argc, char * argv[]) { using boost::lexical_cast; using boost::bad_lexical_cast; std::vector<short> args; while(*++argv) { try { args.push_back(lexical_cast<short>(*argv)); } catch(bad_lexical_cast &) { args.push_back(0); } } ... } 

संभव विकल्प नीचे वर्णित हैं:

1. पहला विकल्प: sscanf ()

  #include <cstdio> #include <string> int i; float f; double d; std::string str; // string -> integer if(sscanf(str.c_str(), "%d", &i) != 1) // error management // string -> float if(sscanf(str.c_str(), "%f", &f) != 1) // error management // string -> double if(sscanf(str.c_str(), "%lf", &d) != 1) // error management 

यह एक त्रुटि है (सीपीकेचेक द्वारा भी दिखाया गया है) क्योंकि "फ़ील्ड की सीमाओं के बिना scanf लिबसी के कुछ संस्करणों पर भारी इनपुट डेटा के साथ क्रैश कर सकता है" ( यहां देखें, और यहां )।

2. दूसरा विकल्प: std :: sto * ()

  #include <iostream> #include <string> int i; float f; double d; std::string str; try { // string -> integer int i = std::stoi(s); // string -> float float f = std::stof(s); // string -> double double d = std::stod(s); } catch (...) { // error management } 

यह समाधान कम और सुरुचिपूर्ण है, लेकिन यह केवल C ++ 11 compliants compilers पर उपलब्ध है

3. तीसरा विकल्प: sstreams

  #include <string> #include <sstream> int i; float f; double d; std::string str; // string -> integer std::istringstream ( str ) >> i; // string -> float std::istringstream ( str ) >> f; // string -> double std::istringstream ( str ) >> d; // error management ?? 

हालांकि, इस समाधान के साथ खराब इनपुट ( यहां देखें) के बीच अंतर करना कठिन है।

4. चौथा विकल्प: बूस्ट का लेक्सिकल_कास्ट

  #include <boost/lexical_cast.hpp> #include <string> std::string str; try { int i = boost::lexical_cast<int>( str.c_str()); float f = boost::lexical_cast<int>( str.c_str()); double d = boost::lexical_cast<int>( str.c_str()); } catch( boost::bad_lexical_cast const& ) { // Error management } 

हालांकि, यह सिर्फ sstream का एक आवरण है, और दस्तावेज़ीकरण बेहतर त्रुटि प्रबंधन ( यहाँ देखें) के लिए sstrem का उपयोग करने का सुझाव देता है।

5. पांचवें विकल्प: स्ट्रॉ * ()

त्रुटि प्रबंधन के कारण यह समाधान बहुत लंबा है, और इसे यहां वर्णित किया गया है। चूंकि कोई फ़ंक्शन एक सादे इंटर्न रिटर्न नहीं करता है, इसलिए पूर्णांक के मामले में रूपांतरण की आवश्यकता है (यह रूपांतरण कैसे प्राप्त किया जा सकता है के लिए यहां देखें)।

6. छठी विकल्प: क्यूटी

  #include <QString> #include <string> bool ok; std::string; int i = QString::fromStdString(str).toInt(&ok); if (!ok) // Error management float f = QString::fromStdString(str).toFloat(&ok); if (!ok) // Error management double d = QString::fromStdString(str).toDouble(&ok); if (!ok) // Error management 

निष्कर्ष

संक्षेप में, सबसे अच्छा समाधान C ++ 11 std :: stoi () या, दूसरे विकल्प के रूप में, क्यूटी पुस्तकालयों का उपयोग। अन्य सभी समाधान निराश या छोटी गाड़ी हैं

बेशक, मेरा समाधान नकारात्मक पूर्णांक के लिए काम नहीं करेगा, लेकिन यह सभी सकारात्मक पूर्णांकों को इनपुट पाठ से निकालेगा जिसमें इंटीजर शामिल होंगे। यह 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 ) को नौकरी के लिए बहुत अच्छी तरह से करना चाहिए

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

http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/

Windows में, आप इसका उपयोग कर सकते हैं:

 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 को आधार निर्दिष्ट करने की आवश्यकता है अगर आपको हेक्साडेमिकल अर्थ की आवश्यकता है।

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

प्रथम: इंट 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

यह सामान्य रूप से काम करता है जब मैं इसका उपयोग करता हूं:

 int myint = int::Parse(mystring);