सबसे छोटा तरीका क्या है, अधिमानतः इनलाइन-सक्षम, एक स्ट्रिंग को एक इंट में बदलने के लिए? स्टाल और बूस्ट का उपयोग करते हुए उत्तर का स्वागत किया जाएगा।
to_string
है जैसेstd::string s = std::to_string(42)
सबसे छोटा तरीका क्या है, अधिमानतः इनलाइन-सक्षम, एक स्ट्रिंग को एक इंट में बदलने के लिए? स्टाल और बूस्ट का उपयोग करते हुए उत्तर का स्वागत किया जाएगा।
to_string
है जैसेstd::string s = std::to_string(42)
जवाबों:
आप C ++ 11 में std :: to_string का उपयोग कर सकते हैं
int i = 3;
std::string str = std::to_string(i);
boost::lexical_cast<std::string>(yourint)
से boost/lexical_cast.hpp
Std :: ostream सपोर्ट के साथ हर चीज के लिए काम करना, लेकिन उतना तेज नहीं है, उदाहरण के लिए, itoa
यहां तक कि यह स्ट्रिंगस्ट्रीम या स्कैनफ से भी तेज प्रतीत होता है:
lexical_cast
लाता है जैसे , लेकिन लगता है कि बूस्ट इस तरह के कार्यों के लिए बहुत अधिक है ...
अच्छी तरह से जाना जाता है कि धारा ऑपरेटर का उपयोग कर रहा है:
#include <sstream>
std::ostringstream s;
int i;
s << i;
std::string converted(s.str());
बेशक आप इसे किसी भी प्रकार के लिए टेंप्लेट फंक्शन ^ ^ का उपयोग करके सामान्य कर सकते हैं
#include <sstream>
template<typename T>
std::string toString(const T& value)
{
std::ostringstream oss;
oss << value;
return oss.str();
}
#include <sstream>
।
std::
;)
यदि आप std::to_string
C ++ 11 से उपयोग नहीं कर सकते हैं , तो आप इसे cppreference.com पर परिभाषित कर सकते हैं:
std::string to_string( int value )
एक हस्ताक्षरित दशमलव पूर्णांक को एक स्ट्रिंग में समान सामग्री के साथ परिवर्तित करता है, जोstd::sprintf(buf, "%d", value)
पर्याप्त रूप से बड़े बफ़ के लिए उत्पादन करेगा।
कार्यान्वयन
#include <cstdio>
#include <string>
#include <cassert>
std::string to_string( int x ) {
int length = snprintf( NULL, 0, "%d", x );
assert( length >= 0 );
char* buf = new char[length + 1];
snprintf( buf, length + 1, "%d", x );
std::string str( buf );
delete[] buf;
return str;
}
आप इसके साथ अधिक कर सकते हैं। बस "%g"
फ्लोट या डबल को स्ट्रिंग में "%x"
बदलने के लिए उपयोग करें, इंट को हेक्स प्रतिनिधित्व में बदलने के लिए उपयोग करें, और इसी तरह।
गैर-मानक फ़ंक्शन, लेकिन इसके सबसे आम संकलक पर लागू किया गया:
int input = MY_VALUE;
char buffer[100] = {0};
int number_base = 10;
std::string output = itoa(input, buffer, number_base);
अपडेट करें
C ++ 11 ने कई std::to_string
अतिभारित किए (ध्यान दें कि यह बेस -10 में चूक करता है)।
ostream
साथ ही काम करता है, तो आप एक द्विआधारी, अष्टाधारी, या हेक्स प्रारूप के अलावा कुछ के रूप में नंबर-स्ट्रिंग को बचाने की जरूरत है जब तक (जैसे आधार-32)।
itoa()
या stricmp()
दिए जाते हैं ।
sprintf
ओपी के लक्ष्य को भी पूरा कर सकता है (हालांकि अभी भी लचीलेपन की कमी से ग्रस्त है अगर आम आधार संख्या के अलावा कुछ भी आवश्यक है)।
निम्नलिखित मैक्रो एकल-उपयोग के रूप में काफी कॉम्पैक्ट नहीं है ostringstream
याboost::lexical_cast
।
लेकिन अगर आपको अपने कोड में बार-बार रूपांतरण-से-स्ट्रिंग की आवश्यकता होती है, तो यह मैक्रो हर बार सीधे स्ट्रिंगस्ट्रीम या स्पष्ट कास्टिंग की तुलना में उपयोग में अधिक सुरुचिपूर्ण होता है।
यह बहुत ही बहुमुखी है, क्योंकि यह समर्थित सभी चीजों को परिवर्तित करता हैoperator<<()
संयोजन में भी ।
परिभाषा:
#include <sstream>
#define SSTR( x ) dynamic_cast< std::ostringstream & >( \
( std::ostringstream() << std::dec << x ) ).str()
स्पष्टीकरण:
std::dec
गुमनाम बनाने के लिए एक पक्ष प्रभाव से मुक्त तरीका है ostringstream
एक सामान्य में ostream
तोoperator<<()
समारोह देखने सभी प्रकार के लिए सही ढंग से काम करता है। (यदि आप पहले तर्क सूचक प्रकार हैं, तो आप मुसीबत में पड़ जाते हैं।)
dynamic_cast
करने के लिए प्रकार वापस लौट ostringstream
ताकि आप कॉल कर सकते हैंstr()
उस पर ।
उपयोग:
#include <string>
int main()
{
int i = 42;
std::string s1 = SSTR( i );
int x = 23;
std::string s2 = SSTR( "i: " << i << ", x: " << x );
return 0;
}
inline template<class T> std::string SSTR( T x ) { return dynamic_cast< std::ostringstream & >( (std::ostringstream() << std::dec << x) ).str() }
? (परीक्षण नहीं किया गया है, लेकिन मुझे आश्चर्य है कि क्या गलत होगा और क्यों?
int
(मेरा पहला उदाहरण) के लिए करेगा। लेकिन बिना ostream
में संकलक के लिए दिखाई दे main
(के रूप में यह टेम्पलेट समारोह भीतर छिपा हुआ है), उसे ढूंढने की कोशिश करेंगे operator<<()
के लिए const char []
मेरे दूसरे उदाहरण में - जो croak होगा। मुझे पता है कि ओपी ने केवल एक के लिए कहा था int
, लेकिन यह अधिक सामान्य मैक्रो इतना उपयोगी है (और वास्तव में काफी व्यापक है) कि मुझे लगा कि मैं यहां शामिल करूंगा।
आप इस फ़ंक्शन का उपयोग करने के int
लिए std::string
बाद में बदलने के लिए उपयोग कर सकते हैं <sstream>
:
#include <sstream>
string IntToString (int a)
{
stringstream temp;
temp<<a;
return temp.str();
}
आप अपने प्रोजेक्ट में इटोआ के कार्यान्वयन को शामिल कर सकते हैं।
यहाँ यह std :: string: http://www.strudel.org.uk/itoa/ के साथ काम करने के लिए संशोधित किया गया है
#include <string>
#include <stdlib.h>
यहाँ int को string में बदलने का एक और आसान तरीका है
int n = random(65,90);
std::string str1=(__String::createWithFormat("%c",n)->getCString());
आप अधिक तरीकों के लिए इस लिंक पर जा सकते हैं https://www.geeksforgeeks.org/what-is-the-best-way-in-c-to-convert-a-number-to-a-string/
मान लो मेरे पास है integer = 0123456789101112
। अब, इस पूर्णांक को stringstream
कक्षा द्वारा एक स्ट्रिंग में परिवर्तित किया जा सकता है ।
यहाँ C ++ में कोड है:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,i;
string s;
stringstream st;
for(i=0;i<=12;i++)
{
st<<i;
}
s=st.str();
cout<<s<<endl;
return 0;
}