दिलचस्प पोस्ट
AsyncTaskLoader बनाम AsyncTask फ़ंक्शन को हर 10 मिनट कॉल करना एंड्रॉइड वेबव्यू एक HTTPS यूआरएल लोड नहीं कर रहा है मैं अपना जावास्क्रिप्ट कोड डिबग कैसे कर सकता हूं? यूज़र कंट्रोल लाइब्रेरी और कस्टम कंट्रोल लाइब्रेरी के बीच अंतर क्या है? गूगल मैप एपीआई v3 ~ बस एक infowindow बंद करें? सी में सरणी वेतन वृद्धि ऑपरेटर दो सॉर्टेड लिंक की गई सूचियों को मर्ज करना DialogFragment से परिणाम प्राप्त करें समवर्ती प्रोग्रामिंग और समानांतर प्रोग्रामिंग के बीच अंतर क्या है? जावास्क्रिप्ट लिंक, "#" या "जावास्क्रिप्ट: शून्य (0)" के लिए कौन सी "href" मान का उपयोग करना चाहिए? पायथन में कैसे मैं कक्षा विधियों के भीतर "स्थिर" वर्ग चर का उपयोग कर सकता हूं पूर्णांक लगातार पूल परिवर्तन का व्यवहार 127 पर क्यों होता है? Node.js वेब सर्वर के अंदर PHP स्क्रिप्ट निष्पादित करें क्या आप सी # DLL को सी डीएलएल से कॉल कर सकते हैं?

C ++ स्ट्रिंग के पूर्णांक को परिवर्तित करने के लिए वैकल्पिक (आईओएओ) के लिए?

मैं सोच रहा था कि क्या एक स्ट्रिंग के लिए पूर्णांक को परिवर्तित करने के लिए itoa() का एक विकल्प था, क्योंकि जब मैं इसे विज़ुअल स्टूडियो में चलाता हूं, तब मुझे चेतावनियां मिलती हैं, और जब मैं लिनक्स के तहत अपना कार्यक्रम बनाने की कोशिश करता हूं, तो मुझे एक संकलन त्रुटि मिलती है।

Solutions Collecting From Web of "C ++ स्ट्रिंग के पूर्णांक को परिवर्तित करने के लिए वैकल्पिक (आईओएओ) के लिए?"

सी ++ 11 में आप std::to_string उपयोग कर सकते हैं:

 #include <string> std::string s = std::to_string(5); 

यदि आप सी ++ 11 से पहले काम कर रहे हैं, तो आप सी ++ स्ट्रीम का उपयोग कर सकते हैं:

 #include <sstream> int i = 5; std::string s; std::stringstream out; out << i; s = out.str(); 

http://notfaq.wordpress.com/2006/08/30/c-convert-int-to-string/ से लिया गया

बढ़ावा :: lexical_cast बहुत अच्छी तरह से काम करता है

 #include <boost/lexical_cast.hpp> int main(int argc, char** argv) { std::string foo = boost::lexical_cast<std::string>(argc); } 

पुरातत्त्व

इटोआ एक गैर-मानक सहायक समारोह है जो एटीआई मानक समारोह के पूरक के लिए डिजाइन किया गया है, और संभवतः एक स्प्रीन्फ छिपा रहा है (अधिकतर इसकी विशेषताएं स्प्रिंटफ़ के अनुसार लागू की जा सकती हैं): http://www.cplusplus.com/reference/clibrary/cstdlib/ itoa.html

सी वे

स्प्रिंटफ़ का प्रयोग करें या snprintf या जो भी उपकरण आपको मिल जाए

इस तथ्य के बावजूद कि कुछ फ़ंक्शंस मानक में नहीं हैं, जैसा कि उनकी टिप्पणियों में "एकबिबोन" द्वारा ठीक से वर्णित है, सबसे अधिक संकलक आपको एक विकल्प प्रदान करेगा (जैसे विजुअल सी ++ के पास अपना स्वयं का _snprintf है यदि आप इसकी आवश्यकता है तो snprintf के लिए टाइप कर सकते हैं)

सी ++ रास्ता

सी ++ धाराओं का प्रयोग करें (वर्तमान मामले में std :: stringstream (या यहां तक ​​कि पदावनत std :: strstream, जैसा कि उसकी पुस्तकों में से एक में हर्ब सटर द्वारा प्रस्तावित है, क्योंकि यह कुछ हद तक तेज है)।

निष्कर्ष

आप सी ++ में हैं, जिसका अर्थ है कि आप जिस तरीके से इसे चाहते हैं उसे चुन सकते हैं:

  • तेज़ तरीका (अर्थात सी रास्ता), लेकिन आपको यह सुनिश्चित करना चाहिए कि कोड आपके आवेदन में एक बाधा है (समय से पहले अनुकूलन बुराई है, आदि) और यह कि आपके कोड को सुरक्षित रूप से बफर ओवररों को खतरे में डालने से बचने के लिए सुरक्षित रूप से समझाया गया है।

  • सुरक्षित तरीके (यानी, सी ++ रास्ता), यदि आप जानते हैं कि कोड का यह हिस्सा महत्वपूर्ण नहीं है, तो बेहतर होगा कि कोड का यह भाग यादृच्छिक क्षणों में नहीं टूटेगा क्योंकि किसी को कोई आकार या एक संकेतक समझता है (ऐसा होता है वास्तविक जीवन में, जैसे … कल, मेरे कंप्यूटर पर, क्योंकि किसी ने इसे वास्तव में ज़रूरत के बिना तेज़ तरीका का उपयोग करने के लिए "अच्छा" कहा)।

Sprintf () की कोशिश करें:

 char str[12]; int num = 3; sprintf(str, "%d", num); // str now contains "3" 

sprintf () printf () की तरह है, लेकिन एक स्ट्रिंग के लिए आउटपुट।

साथ ही, टिप्पणियों में वर्णित परप्पा के रूप में, आप बफर ओवरफ्लो को रोकने से रोकने के लिए snprintf () का उपयोग करना चाहें (जहां आप परिवर्तित कर रहे नंबर आपकी स्ट्रिंग के आकार में फिट नहीं हैं।) यह इस तरह कार्य करता है:

 snprintf(str, sizeof(str), "%d", num); 

परिदृश्य के पीछे, lexical_cast यह करता है:

 std::stringstream str; str << myint; std::string result; str >> result; 

यदि आप इसके लिए "खींचें" को बढ़ावा नहीं देना चाहते हैं, तो ऊपर का उपयोग करना एक अच्छा समाधान है

हम अपने स्वयं के iota समारोह को सी ++ में परिभाषित कर सकते हैं:

 string itoa(int a) { string ss=""; //create empty string while(a) { int x=a%10; a/=10; char i='0'; i=i+x; ss=i+ss; //append new character at the front of the string! } return ss; } 

#include <string> को #include <string> करने के लिए मत भूलना #include <string>

सी ++ 11 अंत में इस को std::to_string प्रदान करता है। इसके अलावा boost::lexical_cast पुराने boost::lexical_cast लिए आसान उपकरण है

यहां कुछ शर्तों के साथ, इसेआआआ का सी-संस्करण दिया गया है:

 char* custom_itoa(int i) { static char output[24]; // 64-bit MAX_INT is 20 digits char* p = &output[23]; for(*p--=0;i;i/=10) *p--=i%10+0x30; return ++p; } 
  • यह नकारात्मक संख्याओं को संभाल नहीं करता है
  • यह वर्तमान में दशमलव के रूप में 23-अक्षरों से अधिक संख्या संभाल नहीं करता है।
  • यह धागा-सुरक्षित नहीं है
  • जैसे ही फ़ंक्शन को फिर से बुलाया जाता है, वापसी मूल्य को मिट जाएगा / भ्रष्ट हो जाएगा
    इसलिए यदि आप रिटर्न वेल्यू को चारों ओर रखने के लिए जा रहे हैं, तो आपको इसे अलग बफ़र पर strcpy करने की आवश्यकता है।

मैं इन टेम्पलेट्स का उपयोग करता हूँ

 template <typename T> string toStr(T tmp) { ostringstream out; out << tmp; return out.str(); } template <typename T> T strTo(string tmp) { T output; istringstream in(tmp); in >> output; return output; } 

Boost.Format या FastFormat , दोनों उच्च गुणवत्ता C ++ लाइब्रेरी प्रयास करें:

 int i = 10; std::string result; 

बूस्ट के साथ। प्रारूप

 result = str(boost::format("%1%", i)); 

या फास्टफॉर्मेट

 fastformat::fmt(result, "{0}", i); fastformat::write(result, i); 

जाहिर है वे दोनों एक पूर्णांक के सरल रूपांतरण से बहुत अधिक करते हैं

आप वास्तव में एक चालाकी से लिखा टेम्पलेट फ़ंक्शन के साथ स्ट्रिंग में कुछ भी कन्वर्ट कर सकते हैं। यह कोड उदाहरण एक विन -32 सिस्टम में उपनिर्देशिका बनाने के लिए एक लूप का उपयोग करता है। डायरेक्टरी नामों को उत्पन्न करने के लिए एक प्रत्यय के साथ रूट को जोड़ना स्ट्रिंग कन्साटाइनेशन ऑपरेटर, ऑपरेटर +, का उपयोग किया जाता है। प्रत्यय को लूप नियंत्रण चर, मैं, एक सी + + स्ट्रिंग में परिवर्तित करके, टेम्पलेट फ़ंक्शन का उपयोग करके और एक और स्ट्रिंग के साथ मिलकर संयोजन किया जाता है।

 //Mark Renslow, Globe University, Minnesota School of Business, Utah Career College //C++ instructor and Network Dean of Information Technology #include <cstdlib> #include <iostream> #include <string> #include <sstream> // string stream #include <direct.h> using namespace std; string intToString(int x) { /**************************************/ /* This function is similar to itoa() */ /* "integer to alpha", a non-standard */ /* C language function. It takes an */ /* integer as input and as output, */ /* returns a C++ string. */ /* itoa() returned a C-string (null- */ /* terminated) */ /* This function is not needed because*/ /* the following template function */ /* does it all */ /**************************************/ string r; stringstream s; s << x; r = s.str(); return r; } template <class T> string toString( T argument) { /**************************************/ /* This template shows the power of */ /* C++ templates. This function will */ /* convert anything to a string! */ /* Precondition: */ /* operator<< is defined for type T */ /**************************************/ string r; stringstream s; s << argument; r = s.str(); return r; } int main( ) { string s; cout << "What directory would you like me to make?"; cin >> s; try { mkdir(s.c_str()); } catch (exception& e) { cerr << e.what( ) << endl; } chdir(s.c_str()); //Using a loop and string concatenation to make several sub-directories for(int i = 0; i < 10; i++) { s = "Dir_"; s = s + toString(i); mkdir(s.c_str()); } system("PAUSE"); return EXIT_SUCCESS; } 

पर्याप्त लंबाई की एक स्ट्रिंग आवंटित करें, फिर snprintf का उपयोग करें

सबसे अच्छा जवाब, आईएमओ, यहां दिया गया कार्य है:

http://www.jb.man.ac.uk/~slowe/cpp/itoa.html

यह गैर-एएनएसआई समारोह को कई लिब्ज़ द्वारा प्रदान की गई नकल करता है।

 char* itoa(int value, char* result, int base); 

यह भी तेज बिजली है और ओएस के तहत अच्छी तरह से अनुकूल है, और आप c ++ string_format () … या sprintf का उपयोग नहीं कर रहे हैं कि कारण वे बहुत धीमा है, है ना?

नोट करें कि stringstream विधियों में से सभी स्वरूपण के लिए लोकेल ऑब्जेक्ट के उपयोग के आसपास लॉकिंग शामिल हो सकते हैं। यदि आप इस थ्रेड से कई सूत्रों का उपयोग कर रहे हैं तो इससे कुछ सावधान रहना होगा …

अधिक के लिए यहां देखें। संख्या को सी ++ में निर्दिष्ट लंबाई के साथ स्ट्रिंग में कनवर्ट करें

 int number = 123; stringstream = s; s << number; cout << ss.str() << endl; 

विंडोज सीई पर व्युत्पन्न प्लेटफार्मों पर, डिफ़ॉल्ट रूप से कोई भी iostream नहीं है iostream वहां जाने के लिए जिस तरह से पसंद किया जाता है _itoa<> परिवार के साथ, आमतौर पर _itow<> (चूंकि वैसे भी सबसे स्ट्रिंग सामान यूनिकोड हैं)।

यदि आप स्ट्रिंग रूपांतरण पद्धति के लिए तेज़ और साथ ही सुरक्षित पूर्णांक में रूचि रखते हैं और मानक पुस्तकालय तक सीमित नहीं हैं, तो मैं FormatInt विधि को सी ++ प्रारूप लाइब्रेरी से सुझा सकता हूं:

 fmt::FormatInt(42).str(); // convert to std::string fmt::FormatInt(42).c_str(); // convert and get as a C string // (mind the lifetime, same as std::string::c_str()) 

बूस्ट कर्मा से रूपांतरण मानकों को स्ट्रिंग करने के लिए पूर्णांक के अनुसार, यह विधि कई बार std::stringstream या std::stringstream से अधिक तेज है। यह int_generator कर्मा के स्वयं के int_generator से भी तेज है क्योंकि एक स्वतंत्र बेंचमार्क द्वारा पुष्टि की गई थी।

अस्वीकरण: मैं इस पुस्तकालय के लेखक हूं।

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

यहाँ लिंक है इष्टतम बेस -10 केवल आईओएएए () फ़ंक्शन? प्रदर्शन कम से कम 10x है जो sprintf () का है निम्नानुसार बेंचमार्क फ़ंक्शन का क्यूए परीक्षण भी है।

 start = clock(); for (int i = LONG_MIN; i < LONG_MAX; i++) { if (i != atoi(_i32toa(buff, (int32_t)i))) { printf("\nError for %i", i); } if (!i) printf("\nAt zero"); } printf("\nElapsed time was %f milliseconds", (double)clock() - (double)(start)); 

कॉलर के भंडारण का उपयोग करने के बारे में कुछ मूर्खतापूर्ण सुझाव दिए गए हैं, जो कॉलर के पते स्थान में किसी बफर में कहीं नतीजे निकालते हैं। उन पर ध्यान न दें। मैं जो कोड सूचीबद्ध करता हूं वह पूरी तरह से काम करता है, क्योंकि बेंचमार्क / क्यूए कोड दर्शाता है।

मेरा मानना ​​है कि यह कोड एम्बेडेड वातावरण में उपयोग करने के लिए पर्याप्त दुबला है वाईएमएमवी, बिल्कुल।

उपरोक्त सुझावों में से अधिकांश तकनीकी तौर पर सी ++ नहीं हैं, वे सी समाधान हैं

Std :: stringstream के उपयोग में देखें