কোন ইনটকে একটি স্ট্রিংয়ে রূপান্তর করতে সবচেয়ে কম উপায়, পছন্দসই ইনলাইন-সক্ষম? 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;
}