কোন ইনটকে একটি স্ট্রিংয়ে রূপান্তর করতে সবচেয়ে কম উপায়, পছন্দসই ইনলাইন-সক্ষম? Stl এবং boost ব্যবহার করে উত্তরগুলি স্বাগত জানানো হবে।
to_string
মতstd::string s = std::to_string(42)
কোন ইনটকে একটি স্ট্রিংয়ে রূপান্তর করতে সবচেয়ে কম উপায়, পছন্দসই ইনলাইন-সক্ষম? Stl এবং boost ব্যবহার করে উত্তরগুলি স্বাগত জানানো হবে।
to_string
মতstd::string s = std::to_string(42)
উত্তর:
আপনি সি ++ 11 তে স্ট্যান্ড :: টু স্ট্রিং ব্যবহার করতে পারেন
int i = 3;
std::string str = std::to_string(i);
boost::lexical_cast<std::string>(yourint)
থেকে boost/lexical_cast.hpp
স্ট্যান্ডার্ড :: অস্ট্রিমে সমর্থন সহ সমস্ত কিছুর জন্য কাজ, তবে তত দ্রুত নয়, উদাহরণস্বরূপ, 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
সি ++ 11 থেকে ব্যবহার করতে না পারেন , তবে এটি সিপ্রেফারেন্স ডটকম-এ সংজ্ঞায়িত হিসাবে আপনি এটি লিখতে পারেন:
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"
রূপান্তর করতে, hex উপস্থাপনায় int রূপান্তর করতে ব্যবহার করুন ইত্যাদি on
অ-মানক ফাংশন, তবে এটি বেশিরভাগ সাধারণ সংকলকগুলিতে প্রয়োগ করা হয়:
int input = MY_VALUE;
char buffer[100] = {0};
int number_base = 10;
std::string output = itoa(input, buffer, number_base);
হালনাগাদ
সি ++ 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 []
আমার দ্বিতীয় উদাহরণে - যা অসন্তোষ প্রকাশ করা হবে না। আমি জানি ওপি কেবল একটি চেয়েছিল int
, তবে এই আরও জেনেরিক ম্যাক্রো এতটাই দরকারী (এবং আসলে বেশ বিস্তৃত) যে আমি ভেবেছিলাম আমি এটি এখানে অন্তর্ভুক্ত করব।
আপনি আপনার প্রকল্পে itoa বাস্তবায়ন অন্তর্ভুক্ত করতে পারেন।
এখানে স্টাড :: স্ট্রিংয়ের সাথে কাজ করার জন্য এটি করা হয়েছে: http://www.strudel.org.uk/itoa/
#include <string>
#include <stdlib.h>
এখানে, স্ট্রিং-তে int রূপান্তর করার আরও একটি সহজ উপায়
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
ক্লাস দ্বারা একটি স্ট্রিংয়ে রূপান্তরিত হতে পারে ।
সি ++ তে কোডটি এখানে:
#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;
}