C ++ හි int එක string බවට පරිවර්තනය කිරීමට පහසුම ක්‍රමය


1601

C ++ හි intසමාන සිට සමාන බවට පරිවර්තනය කිරීමට ඇති පහසුම ක්‍රමය කුමක්ද? stringමම ක්‍රම දෙකක් ගැන දන්නවා. පහසු ක්‍රමයක් තිබේද?

(1)

int a = 10;
char *intStr = itoa(a);
string str = string(intStr);

(2)

int a = 10;
stringstream ss;
ss << a;
string str = ss.str();

4
මම හිතන්නේ ඔබ ලබා දුන් ක්‍රම දෙකම හොඳ විසඳුම්. එය රඳා පවතින්නේ ඔබ එය කළ යුතු සන්දර්භය මත ය. ඔබ දැනටමත් ධාරාවන් සමඟ වැඩ කරන්නේ නම්, උදාහරණයක් ලෙස ගොනුවක් කියවීම හෝ ලිවීම, එවිට ඔබේ දෙවන ක්‍රමය හොඳම වේ. ඔබට ශ්‍රිත තර්කයකට නූලක් ලෙස int එකක් යැවීමට අවශ්‍ය නම්, itoa පහසු ක්‍රමයක් විය හැකිය. නමුත් බොහෝ විට, ලිපිගොනු සමඟ ගනුදෙනු කිරීමේදී int to string පරිවර්තනය සිදු වේ, එබැවින් ධාරාවන් සුදුසු වේ.
චාල්ස් බ un නෙට්

42
විකල්ප 1 පවා ඔබ වෙනුවෙන් වැඩ කරන්නේ කෙසේද? itoa()පරාමිතීන් තුනක් ගත යුත්තේ මගේ අවබෝධයයි .
b1nary.atr0phy

1
itoa ධාරාවට සමාන වේගයට වඩා වේගවත් වනු ඇත. අයිටෝවා ක්‍රමය සමඟ නූල් බෆරය නැවත භාවිතා කිරීමේ ක්‍රම ද ඇත (ඔබ නිතරම නූල් ජනනය කරන්නේ නම් ගොඩවල් වෙන් කිරීම වළක්වා ගන්න. උදා: සංඛ්‍යාත්මක නිමැවුම් වේගයෙන් යාවත්කාලීන කිරීම සඳහා). විකල්පයක් ලෙස ඔබට සමහර ප්‍රතිපාදන ඉහළින් අඩු කිරීම සඳහා අභිරුචි ප්‍රවාහයක් ජනනය කළ හැකිය. ප්‍රවාහය මුලින්ම තැනීම ද අඩු වියදම් ව්‍යාපාරයක් නොවේ.
පීට්

6
EtPete: ඔබ වේගවත් වන්නේ කුමක්ද යන්න ගැන කරදර වීමට පටන් ගත් පසු, ඔබට stackoverflow.com/questions/4351371/…
බෙන්

20
Itoa () ප්‍රමිතියේ කොටසක් නොවන බවත්, එබැවින් එය භාවිතා කිරීමෙන් ඔබේ කේතය අතේ ගෙන යා නොහැකි බවත් සියලු සම්පාදකයින් එයට සහාය නොදක්වන බවත් සලකන්න. මෙම ක්‍රියාකාරිත්වයට සහය නොදක්වන GCC හැර වෙනත් දෙයක් ඔබ භාවිතා නොකරන්නේ නම් ලිනක්ස් සඳහා ඔබ නිසැකවම ඉවත් වේ. ඔබට C ++ 0x තිබේ නම්, atMatthieu ඔහුගේ පිළිතුරෙන් යෝජනා කර ඇති දේ සමඟ යන්න. එය එසේ නොවේ නම්, එය හොඳින් සහාය දක්වන අංගයක් බැවින් නූල් ප්‍රවාහය සමඟ යන්න, ඔබේ කේතය එහි ඇති සෑම C ++ සම්පාදකයෙකු සමඟම අනුකූල විය යුතුය. විකල්පයක් ලෙස ඔබට සෑම විටම ස්ප්රින්ට්ෆ් () සමඟ යා හැකිය.
rbaleksandar

Answers:


2130

C ++ 11 හඳුන්වාදෙයි std::stoi(හා එක් එක් සංඛ්යා වර්ගය සඳහා ප්රභේද්යයන්) සහ std::to_string, සී යන සගයන් atoiහා itoaනමුත් කාලීන ප්රකාශ std::string.

#include <string> 

std::string s = std::to_string(42);

ඒ නිසා මට සිතිය හැකි කෙටිම ක්‍රමයයි. යතුරුපදය භාවිතා කරමින් ඔබට වර්ගය නම් කිරීම පවා අතහැර දැමිය හැකිය auto:

auto s = std::to_string(42);

සටහන: බලන්න [string.conversions] ( 21.5 දී n3242 )


199
to_stringstdනිවැරදි කිරීමේ සාමාජිකයෙකු නොවේ : stackoverflow.com/questions/12975341/…
බෙන්

36
නැතහොත් ඔබේ සම්පාදකයා මත පදනම්ව, නිවැරදි භාෂා ප්‍රමිතිය සකසන්න:g++ -std=c++11 someFile.cc
තෝමස් එම්. ඩුබුයිසන්

12
Te ස්ටීව්: එය එසේ විය යුතුයි. stdඑක් අයෙකු හැර මා දන්නා සෑම සම්පාදකයෙකුගේම සාමාජිකයෙකි .
මූයිං තාරා

5
AtMatthiew M. මම ඔබ යෝජනා කරන දේම භාවිතා කරන නමුත් මම මෙම දෝෂය ලබා Error : No instance of overloaded function "std::to_string" matches the argument list ගනිමි : මම VS2010 c ++ භාවිතා කරමි

19
Ling පියාසර කිරීම: VS2010 යටතේ ඔබ පරිවර්තනය කරන නිඛිලය පහත දැක්වෙන වර්ග වලින් එකකට පැහැදිලිව දැමිය යුතුය [_ දිග, _උල්ලොන්ග්, දිගු ද්විත්ව]; එනම්:string s = to_string((_ULonglong)i);
සැක්

185

වසර කිහිපයකට පසු @ v.oddou සමඟ සාකච්ඡාවක් ආරම්භ කරමින්, C ++ 17 අවසාන වශයෙන් සාර්ව අවලස්සන තත්වයට පත් නොවී මුලින් සාර්ව මත පදනම් වූ වර්ග-අ nost ෙයවාදී විසඳුමක් (පහත සංරක්ෂණය කර ඇති) කිරීමට ක්‍රමයක් ලබා දී ඇත.

// variadic template
template < typename... Args >
std::string sstr( Args &&... args )
{
    std::ostringstream sstr;
    // fold expression
    ( sstr << std::dec << ... << args );
    return sstr.str();
}

භාවිතය:

int i = 42;
std::string s = sstr( "i is: ", i );
puts( sstr( i ).c_str() );

Foo x( 42 );
throw std::runtime_error( sstr( "Foo is '", x, "', i is ", i ) );

මුල් පිළිතුර:

"පරිවර්තනය කිරීම ... නූල් බවට පරිවර්තනය කිරීම" පුනරාවර්තන ගැටළුවක් බැවින්, මම සෑම විටම මගේ C ++ ප්‍රභවයන්ගේ කේන්ද්‍රීය ශීර්ෂයක SSTR () සාර්ව අර්ථ දක්වන්නෙමි :

#include <sstream>

#define SSTR( x ) static_cast< std::ostringstream & >( \
        ( std::ostringstream() << std::dec << x ) ).str()

භාවිතය හැකි තරම් පහසු ය:

int i = 42;
std::string s = SSTR( "i is: " << i );
puts( SSTR( i ).c_str() );

Foo x( 42 );
throw std::runtime_error( SSTR( "Foo is '" << x << "', i is " << i ) );

ඉහත සඳහන් වන්නේ C ++ 98 අනුකූල වේ (ඔබට C ++ 11 භාවිතා කළ නොහැකි නම් std::to_string), සහ කිසිදු තෙවන පාර්ශවයකට ඇතුළත් කිරීම අවශ්‍ය නොවේ (ඔබට බූස්ට් භාවිතා කළ නොහැකි නම් lexical_cast<>); මෙම අනෙක් විසඳුම් දෙකම වඩා හොඳ කාර්ය සාධනයක් ඇත.


2
මට එතරම් හුරුපුරුදු නැති dynamic_castනමුත් මම ඒ සඳහා පැමිණිලි කරන බැවින් එය සම්පාදනය කිරීම සඳහා ක්ලැන්ග් භාවිතා කරමි. මම එය අතහැර දැමුවහොත් dynamic_castඑය හොඳින් සම්පාදනය කරයි; dynamic_castමෙම නඩුවේ සේවය කරන්නේ කුමන අරමුණකින්ද ? අපි දැනටමත් නිර්මාණය කරමින් සිටිමු ostringstream, එබැවින් එය දමන්නේ ඇයි?
මැතිව්

2
At මැතිව්: මගේ පිළිතුරේ ඇති සබැඳිය ඉදිකිරීම්වල එක් එක් කොටස පිළිබඳ සවිස්තරාත්මක විස්තරයකට මග පාදයි. අපි a නිර්මාණය කරන අතරම ostringstream, අපි operator<<()එය ඉල්ලා සිටියෙමු , එය නැවත පැමිණේ ostream &- ඒ සඳහා .str()අර්ථ දක්වා නැත. වාත්තු කිරීමකින් තොරව ක්ලැන්ග් විසින් මෙම කාර්යය කරන්නේ කෙසේදැයි මම ඇත්තටම කල්පනා කරමි (නැතහොත් එය එය සමඟ දෝෂයක් ජනනය කරන්නේ ඇයි). මෙම ඉදිකිරීම බොහෝ ස්ථානවල ප්‍රකාශයට පත් කර ඇති අතර, මම එය දශකයකට වැඩි කාලයක් තිස්සේ MSVC, GCC, සහ XLC ඇතුළු විවිධ සම්පාදකයින් මත භාවිතා කර ඇත්තෙමි.
දේව්සෝලර්

5
කුතුහලය සඳහා සාදයට පැමිණ, පහත් කොට සැලකුවා. හේතුව: අලංකාර නොවන හා මන්දගාමී විසඳුමක් සඳහා වැඩි ඡන්ද ප්‍රමාණයක්. 1. සාර්ව භාවිතය. මම ක්‍රමානුකූලව කිසිදු සාර්වයක් ගැන නොසිතමි, නමුත් මෙය ඉතා කෙටි වන අතර, අවසාන සේවාදායකයින් සැමවිටම තර්කය පුනරාවර්තනය වීමට බිය වේ, අනාරක්ෂිත බහු රේඛා මැක්‍රෝ සඳහා ඇති බිය. (0 by අතර ආරක්‍ෂා නොකෙරේ (0)) 2. ගතික_ විකාශනය. ඔබ බලාපොරොත්තු වන පරිදි පුස්තකාලය සැබවින්ම ක්‍රියාත්මක වන බව ඔබට ප්‍රකාශ කිරීමට අවශ්‍ය නම් මිස, ඔබට මෙහි ස්ථිතික_ විකාශනයක් පමණක් අවශ්‍ය බව පෙනේ. කුමන අවස්ථාවකදී ඔබ ඒ වෙනුවට boost :: polymorphic_downcast භාවිතා කළ යුතුය.
v.oddou

2
@ v.oddou: ඇත්ත වශයෙන්ම ඔබට විවේචනය කිරීමට නිදහස තිබේ. නමුත් 1. අවලංගුයි - සාර්ව යනු තනි ප්‍රකාශයකි, do { } while( 0 )කිසිවක් එකතු නොකරයි. 2. සහ 3 සමඟ ඔබට බොහෝ විට කාරණයක් තිබේ - මෙය ස්ථිතික වාත්තු කිරීමකින් කළ හැකි අතර, සමහර විට ඔබගෙන් එක් අයෙකු අච්චු මායාකාරියන්ට “වඩා හොඳ” අතුරු මුහුණතක් ඉදිරිපත් කළ හැකිය. නමුත් මා පැවසූ පරිදි මෙය කිසිසේත් මා විසින්ම සොයා ගැනීමක් නොවේ. අවට බලන්න, මෙම සාර්ව (සාර්ව!) තරමක් සර්වසම්පූර්ණයි. එය POLA හිම අවස්ථාවකි. එය වඩාත් “විධිමත්” කිරීම සඳහා මම මේ සමඟ සෙල්ලම් කරන්නෙමි.
දේව්සෝලර්

1
++ v.oddou: C ++ 17 අප වෙත ගෙන ආ දේවල් අතර මා සොයාගත් දේ දෙස බලන්න. :-) යාවත්කාලීන කළ පිළිතුරට ඔබ කැමති වනු ඇතැයි මම බලාපොරොත්තු වෙමි.
දේව්සොලර්

109

මම සාමාන්‍යයෙන් පහත ක්‍රමය භාවිතා කරමි:

#include <sstream>

template <typename T>
  std::string NumberToString ( T Number )
  {
     std::ostringstream ss;
     ss << Number;
     return ss.str();
  }

එය මෙහි විස්තරාත්මකව විස්තර කර ඇත .


2
භාවිතා කිරීමට පෙර ss, ඔබට ss.clear()එය අවශ්ය වේ . මෙම ආරම්භය නොමැතිව මම බලාපොරොත්තු නොවූ ප්‍රති results ල දැක ඇත්තෙමි.
ජීවිත සමතුලිතතාවය

14
සමතුලිතතාවය: මම එවැනි හැසිරීමක් දැක නැත.
රසූල්

18
සමතුලිතතාවය: ඔබට clear()අලුතින් සාදන ලද ostringstreamවස්තුවක් අවශ්‍ය නොවේ . clear()දෝෂය / eof ධජ නැවත සකසයි, තවම කිසිදු දෝෂයක් / eof තත්වයක් ජනනය වී නොමැත.
රෙමී ලෙබියු

2
@Rasoul NumberToString(23213.123)නිෂ්පාදනය 23213.1අතර std::to_string(23213.123)නිෂ්පාදනය 23213.123000එහි සිදු වන්නේ කුමක්ද?
කිල්සෝන් කිඩ්

1
IlKillzoneKid මෙයට හේතුව std 'ostream රාජ්‍යමය (මෙයින් අදහස් කරන්නේ දශම සංඛ්‍යා ගණන මෙන් පෙර පැවති ඕනෑම රාජ්‍ය වෙනසක් තබා ඇති බවයි) මෙම ක්‍රමය ආරම්භ වන්නේ පෙරනිමි තත්වයකින් ය.
xryl669

85

බොහෝ විට වඩාත් පහසු පහසුම ක්‍රමය වන්නේ ඔබේ දෙවන තේරීම බූස්ට්lexical_cast වැනි අච්චුවකට අත්‍යවශ්‍යයෙන්ම එතීමයි , එබැවින් ඔබේ කේතය මේ ආකාරයෙන් පෙනේ:

int a = 10;
string s = lexical_cast<string>(a);

මෙහි ඇති එක් හොඳ කරුණක් නම්, එය අනෙක් කාස්ට් සඳහා ද සහාය වීමයි (උදා: ප්‍රතිවිරුද්ධ දිශාවට ද ක්‍රියා කරයි).

බූස්ට් ලෙක්සිකල්_කාස්ට් ආරම්භ වූයේ හුදෙක් සංගීත ප්‍රවාහයකට ලිවීමෙන් පසුව, ධාරාවෙන් පිටතට උපුටා ගැනීමක් වුවද, දැන් එයට එකතු කිරීම් කිහිපයක් ඇති බව සලකන්න. පළමුවෙන්ම, වර්ග කිහිපයක් සඳහා විශේෂීකරණයන් එකතු කර ඇත, එබැවින් බොහෝ පොදු වර්ග සඳහා, එය නූල් ප්‍රවාහයක් භාවිතා කිරීමට වඩා සැලකිය යුතු වේගයකින් යුක්ත වේ. දෙවනුව, එය දැන් ප්‍රති result ලය පරික්ෂා කරයි, එබැවින් (නිදසුනක් ලෙස) ඔබ නූලක සිට අ බවට පරිවර්තනය කරන්නේ නම් int, එය බවට පරිවර්තනය කළ නොහැකි යමක් එම නූලෙහි තිබේ නම් එය ව්‍යතිරේකයක් විසි කළ හැකිය int(උදා: 1234සාර්ථක වනු ඇත, නමුත් 123abcවිසි කරයි) .

C ++ 11 වන විට, std::to_stringපූර්ණ සංඛ්‍යා වර්ග සඳහා අධික ලෙස පටවා ඇති ශ්‍රිතයක් ඇත, එබැවින් ඔබට පහත පරිදි කේත භාවිතා කළ හැකිය:

int a = 20;
std::string s = std::to_string(a);
// or: auto s = std::to_string(a);

ප්‍රමිතිය මේවා අර්ථ දක්වන්නේ sprintf(සැපයූ වස්තුවට ගැලපෙන පරිවර්තන පිරිවිතර භාවිතා කිරීම %dසඳහා int), ප්‍රමාණවත් ප්‍රමාණයේ බෆරයක් බවට පරිවර්තනය කර එම බෆරයේ std::stringඅන්තර්ගතයෙන් එකක් සෑදීම සඳහාය.


2
හොඳයි, මම කෙවින්ගේ පිළිතුරට කැමතියි, ඔහු ඇතුළත් කිරීම් සහ නාම අවකාශය පෙන්වන නමුත්. සුළු ඉඟටියකි. :) හොඳ රැකියාවක්, නමුත්!
ජේසන් ආර් මික්

4
ඔබට C ++ 11 සහය නොමැති නම් යා යුතු මාර්ගය මෙය යැයි මම කියමි.
ඇලෙක්ස්

40

ඔබ බූස්ට් ස්ථාපනය කර ඇත්නම් (ඔබ කළ යුත්තේ එයයි):

#include <boost/lexical_cast.hpp>

int num = 4;
std::string str = boost::lexical_cast<std::string>(num);

4
තල්ලුව ස්ථාපනය කිරීමට එකඟ විය. මම හිතන්නේ බොහෝ විට එක් අයෙකුට වඩා නූල් සංයුති කරනු ඇත. මේ සඳහා මම වැඩි කැමැත්තක් දක්වන්නේ බූස්ට් :: ආකෘතිය උදා: ("% 02d", අංකය) .str ()
වර්නර් ඉරැස්මස්

28

සංගීත ප්‍රවාහ භාවිතා කිරීම පහසු වනු ඇත:

#include <sstream>

int x = 42;          // The integer
string str;          // The string
ostringstream temp;  // 'temp' as in temporary
temp << x;
str = temp.str();    // str is 'temp' as string

නැතහොත් ශ්‍රිතයක් කරන්න:

#include <sstream>

string IntToString(int a)
{
    ostringstream temp;
    temp << a;
    return temp.str();
}

18

පිරිසිදු C ++ වලින් මා දන්නා දෙයක් නොවේ. නමුත් ඔබ සඳහන් කළ දෙයෙහි සුළු වෙනස් කිරීමක්

string s = string(itoa(a));

වැඩ කළ යුතු අතර එය ඉතා කෙටි ය.


56
itoa()සම්මත කාර්යයක් නොවේ!
කාටූන් ශිල්පී

4
කාටූන් ශිල්පියා: එහෙනම් මොකක්ද ඒ?
user541686

20
මෙම ශ්‍රිතය ANSI-C සහ C ++ වලින් අර්ථ දක්වා නැත. එබැවින් එයට g ++ වැනි සමහර සම්පාදකයින් සහාය නොදක්වයි.
කාටූන් ශිල්පී

18

මැතිව් එම් විසින් යෝජනා කළstd::to_string පරිදි ඔබට C ++ 11 හි භාවිතා කළ හැකිය :

std::to_string(42);

හෝ, කාර්ය සාධනය ඉතා වැදගත් වේ නම් (උදාහරණයක් ලෙස, ඔබ ආගමට හරවා ගොඩක් කරන්න නම්), ඔබ භාවිතා කළ හැකිය fmt::format_intසිට {fmt} පුස්තකාලයට යනු පූර්ණ සංඛ්යාවකි බවට පරිවර්තනය කිරීමට std::string:

fmt::format_int(42).str();

හෝ සී නූලක්:

fmt::format_int f(42);
f.c_str();

දෙවැන්න කිසිදු ගතික මතක වෙන් කිරීමක් නොකරන අතර එය std::to_stringබූස්ට් කර්මා මිණුම් සලකුණු වලට වඩා 10 ගුණයකින් වේගවත් වේ . බලන්න C ++, සංගීත පරිවර්තනය තදින් පූර්ණ සංඛ්යාමය වැඩි විස්තර සඳහා.

දෙකම නූල් ආරක්ෂිත බව සලකන්න.

මෙන් නොව std::to_string, fmt::format_intC ++ 11 අවශ්‍ය නොවන අතර ඕනෑම C ++ සම්පාදකයෙකු සමඟ ක්‍රියා කරයි.

වියාචනය: මම {fmt} පුස්තකාලයේ කතුවරයා වෙමි.


2
නූල් ආරක්ෂිතව (නැවත ඇතුල් වන) සිටියදී කිසිදු ගතික මතක වෙන් කිරීමක් නොමැති බවට වන ප්‍රකාශය ගැන මට කුතුහලයක් ඇති විය, එබැවින් මම ඔබේ කේතය කියවමි - පන්තිය c_str()තුළ ප්‍රකාශයට පත් කරන ලද බෆරයකට දර්ශකයක් ලබා දෙයි fmt::FormatInt- එබැවින් ආපසු පැමිණි දර්ශකය අවලංගු වේ අර්ධ සළකුණ
සෝරන්

1
ඔව්, සමාන හැසිරීම std::string::c_str()(මේ අනුව නම් කිරීම). ඔබට එය සම්පූර්ණ ප්‍රකාශනයෙන් පිටත භාවිතා කිරීමට අවශ්‍ය නම් වස්තුවක් සාදන්න FormatInt f(42);එවිට ඔබට f.c_str()එය විනාශ වීමේ අනතුරකින් තොරව භාවිතා කළ හැකිය .
vitaut

1
Std :: to_string (num) භාවිතයෙන් int සිට string දක්වා පරිවර්තනය කිරීමට උත්සාහ කරන විට මට අමුතු දෙයක් ලැබේ. මම ප්‍රති result ලය විචල්‍යයක ගබඩා කර n වැඩි වන විට එය stringNum [1] හෝ stringNum [n] ලෙස ප්‍රවේශ කිරීමට උත්සාහ කළහොත් මට කුණු ලැබේ.
user8951490

1
එය නිසැකවම මෙම ප්‍රශ්නයට නිවැරදි පිළිතුරයි: කාර්යක්ෂම හා සම්මත කේතය රාජ්‍ය නොවන.
xryl669

16

sprintf()ආකෘති පරිවර්තනය සඳහා සෑහෙන්න හොඳයි. එවිට ඔබට 1 හි සිදු කළ පරිදි C ++ නූලට ප්‍රති C ලයක් ලෙස C නූල පැවරිය හැකිය.


1
හෙහ්, ඔව්. කෙසේ වෙතත්, මම සාමාන්‍යයෙන් සී නූල් හැසිරවීමේදී ඕනෑම විපාකයක් සඳහා snprintf () සහ මිතුරන් මත රඳා සිටිමි.
Throwback1986

1
AtMatthieuM. ඔබ එසේ නොවන බව ඔබේ අදහස තවදුරටත් සනාථ කරයි. මෙම සීමාව නිසා ප්‍රතිදානය කප්පාදු කර ඇත්නම් ප්‍රතිලාභ අගය යනු ප්‍රමාණවත් ඉඩ ප්‍රමාණයක් තිබුනේ නම් අවසාන නූලට ලිවීමට ඉඩ ඇති අක්ෂර ගණන (අවසන් වන ශුන්‍ය බයිට් හැර) ය. මේ අනුව, ප්‍රමාණයෙන් හෝ වැඩි ගණනක ප්‍රතිලාභ අගයක් යනු ප්‍රතිදානය කපා දැමූ බවයි. එබැවින් ඔබ NULLඅවශ්‍ය බෆරයේ ප්‍රමාණය ලබා ගැනීම සඳහා එය a හා ශුන්‍ය ප්‍රමාණයෙන් අමතන්න .
user1095108

2
10 user1095108: මම හිතන්නේ ඔබ වැරදියට සිතනවා snprintf( එස්එන්පී උපසර්ගය සටහන් කරන්න ) සහ sprintf( එස්පී උපසර්ගය සටහන් කරන්න ). ඔබ ප්‍රමාණය කලින් තිබූ දේට ලබා දෙන අතර එය පිටාර ගැලීම නොකිරීමට වගබලා ගනී, කෙසේ වෙතත් දෙවැන්න බෆරයේ ප්‍රමාණය නොදන්නා අතර එමඟින් පිටාර ගැලීමට ඉඩ ඇත.
මැතිව් එම්.

1
අදහස නම් snprintfපළමුව ප්‍රභේදයක් සහ ඊට sprintfපසුව ප්‍රභේදයක් ඇමතීමයි. ඒ වන විට බෆරයේ ප්‍රමාණය දන්නා බැවින් ඇමතුම් sprintfසම්පූර්ණයෙන්ම ආරක්ෂිත වේ.
user1095108

1
@ user1095108 අහ්, ඔව්. Snprintf සඳහා පළමු බෆරය ප්‍රමාණවත් නොවේ නම්, ප්‍රතිලාභ අගය ඔබට ප්‍රමාණවත් දේ පවසයි. දෙවන ඇමතුම සඳහා මම තවමත් snprintf භාවිතා කරමි, මන්ද ගැලපීම සඳහා ස්ප්‍රින්ට්ෆ් සහ ස්නප්‍රින්ට් ක්‍රියාත්මක කිරීම මත රඳා සිටීම අනවශ්‍ය ලෙස භයානක ය.
mabraham

11

පළමුව ඇතුළත් කරන්න:

#include <string>
#include <sstream>

දෙවනුව ක්රමය එකතු කරන්න:

template <typename T>
string NumberToString(T pNumber)
{
 ostringstream oOStrStream;
 oOStrStream << pNumber;
 return oOStrStream.str();
}

මේ වගේ ක්‍රමය භාවිතා කරන්න:

NumberToString(69);

හෝ

int x = 69;
string vStr = NumberToString(x) + " Hello word!."

10

අංක පරිවර්තනය සඳහා නූල් ප්‍රවාහය භාවිතා කිරීම භයානකයි!

බලන්න http://www.cplusplus.com/reference/ostream/ostream/operator%3C%3C/ එය කියයි එහිදීoperator<< ආකෘතිගත ප්‍රතිදානය ඇතුළු කරන වේ.

ඔබගේ වර්තමාන පෙදෙසි මත පදනම්ව, ඉලක්කම් 3 ට වඩා වැඩි සංඛ්‍යාවක්, ඉලක්කම් 4 ක නූලකට පරිවර්තනය කළ හැකි අතර අමතර දහස් ගණනක් බෙදුම්කරු එකතු කරයි.

උදා, නූලකට int = 1000පරිවර්තනය කළ හැකිය 1.001. මෙය සැසඳීමේ මෙහෙයුම් කිසිසේත් ක්‍රියාත්මක නොවන බවට පත් කළ හැකිය.

එබැවින් std::to_stringමාර්ගය භාවිතා කිරීමට මම තරයේ නිර්දේශ කරමි . එය පහසු වන අතර ඔබ අපේක්ෂා කරන දේ කරයි.

යාවත්කාලීන කරන ලදි (පහත අදහස් බලන්න) :

සී ++ 17 std::to_charsඉහළ කාර්යසාධනයක් සහිත ස්ථාන-ස්වාධීන විකල්පයක් ලෙස සපයයි


2
ඔබට දත්ත හුවමාරු කර ගැනීමට අවශ්‍ය නම් මෙය බරපතල ගැටළුවක් බව මම එකඟ වෙමි. අවාසනාවකට මෙන්, std::to_stringවත්මන් පෙදෙසද භාවිතා කරයි ( en.cppreference.com/w/cpp/string/basic_string/to_string , 'සටහන්' කොටස බලන්න). සියලුම සම්මත මෙවලම් පාහේ (නූල් ප්‍රවාහයේ සිට sprintfපමණක් නොව sscanf) වර්තමාන පෙදෙස භාවිතා කරයි. මෑතක් වන තුරුම මෙය මට තදින් පහර දෙන තෙක් මම දැන සිටියේ නැත. දැනට ගෙදර හැදූ දේවල් භාවිතා කරයි, සෑදීමට අපහසු නැත.
බර්ට් බ්‍රිල්

ඉහළ සබැඳිය තුළ C ++ 17 ඉහළ කාර්යසාධනයක් සහිත ස්ථාන-ස්වාධීන විකල්පයක් ලෙස std :: to_chars සපයන බව ද ප්‍ර stat ප්තියකි.
YesThatIsMyName

අවාසනාවකට මෙන්, මම එළඹෙන වසර (න්) සඳහා C ++ 11 සමඟ සිරවී සිටිමි (දැනටමත් තරමක් දියුණු වීම, වාසනාවකට මෙන්).
බර්ට් බ්‍රිල්

1
from_chars සහ to_chars පරිපූර්ණ නමුත් අවාසනාවකට ඔවුන් wchar_t ප්‍රභේදයක් ඉදිරිපත් කළේ නැත.
gast128

8

C ++ 98 සඳහා , විකල්ප කිහිපයක් තිබේ:

boost/lexical_cast

බූස්ට් යනු සී ++ පුස්තකාලයේ කොටසක් නොවේ, නමුත් බොහෝ ප්‍රයෝජනවත් පුස්තකාල දිගු අඩංගු වේ.

මෙම lexical_castකාර්යය සැකිල්ල අත්තනෝමතික වර්ග යාමට සහ එහි සිට පොදු පරිවර්ථනයන් සහාය ඔවුන් පෙළ ලෙස නියෝජනය කරන විට සඳහා පහසු සහ ස්ථිරසාර ආකෘති පත්රය ඉදිරිපත් කරයි.
- බූස්ට්ගේ ලියකියවිලි

#include "boost/lexical_cast.hpp"
#include <string>

int main() {
    int x = 5;
    std::string x_str = boost::lexical_cast<std::string>(x);
    return 0;
}

ධාවන කාලය සඳහා, lexical_castමෙහෙයුම පළමු පරිවර්තනය සඳහා මයික්‍රෝ තත්පර 80 ක් (මගේ යන්ත්‍රයේ) ගත වන අතර, පසුව අතිරික්තව සිදු කළ හොත් සැලකිය යුතු වේගයකින් පසුව වේගවත් වේ.


itoa

මෙම ශ්‍රිතය ANSI-C හි අර්ථ දක්වා නොමැති අතර එය C ++ හි කොටසක් නොවේ, නමුත් සමහර සම්පාදකයින්ගේ සහාය ඇත.
- cplusplus.com

මෙයින් අදහස් කරන්නේ gcc/ g++භාවිතා කර කේත සම්පාදනය කළ නොහැකි itoaබවයි.

#include <stdlib.h>

int main() {
    int x = 5;
    char * x_str = new char[2];
    x_str = itoa(x, x_str, 10); // base 10
    return 0;
}

වාර්තා කිරීමට ධාවන කාලයක් නොමැත. මට දෘශ්‍ය ස්ටුඩියෝ ස්ථාපනය කර නැත, එය සම්පාදනය කළ හැකි බව වාර්තා වේ itoa.


sprintf

sprintf සී සම්මත පුස්තකාල ශ්‍රිතයක් වන අතර එය සී නූල් මත ක්‍රියා කරයි.

Printf හි ආකෘතිය භාවිතා කර ඇත්නම් මුද්‍රණය කරනු ලබන එකම පෙළක් සහිත නූලක් රචනා කරයි, නමුත් මුද්‍රණය කරනවා වෙනුවට අන්තර්ගතය str මඟින් පෙන්වා ඇති බෆරයේ C string ලෙස ගබඩා වේ.
- cplusplus.com

#include <stdio.h>

int main() {
    int x = 5;
    char * x_str = new char[2];
    int chars_written = sprintf(x_str, "%d", x);
    return 0;
}

මෙම stdio.hශීර්ෂ අවශ්ය විය හැක. ධාවන කාලය සඳහා, sprintfමෙහෙයුම පළමු පරිවර්තනය සඳහා මයික්‍රෝ තත්පර 40 ක් (මගේ යන්ත්‍රයේ) ගත වන අතර, පසුව අතිරික්තව සිදු කළ හොත් සැලකිය යුතු වේගයකින් පසුව වේගවත් වේ.


stringstream

පූර්ණ සංඛ්‍යා නූල් බවට පරිවර්තනය කිරීමේ සී ++ පුස්තකාලයේ ප්‍රධාන ක්‍රමය මෙය වන අතර අනෙක් අතට. stringstreamප්‍රවාහයට අපේක්ෂිත භාවිතය තවදුරටත් සීමා කිරීමට සමාන සහෝදර කාර්යයන් ඇත ostringstream. භාවිතා ostringstreamකිරීම ඔබේ කේතය පා the කයාට පවසන්නේ ඔබ <<ක්‍රියාකරු භාවිතා කිරීමට පමණක් අදහස් කරන බවයි. මෙම ශ්‍රිතය පූර්ණ සංඛ්‍යාවක් නූලකට පරිවර්තනය කිරීම සඳහා විශේෂයෙන් අවශ්‍ය වේ. වඩාත් සවිස්තරාත්මක සාකච්ඡාවක් සඳහා මෙම ප්‍රශ්නය බලන්න .

#include <sstream>
#include <string>

int main() {
    int x = 5;
    std::ostringstream stream;
    stream << x;
    std::string x_str = stream.str();
    return 0;
}

ධාවන කාලය සම්බන්ධයෙන් ගත් කල, ostringstreamමෙහෙයුම මයික්‍රෝ තත්පර 71 ක් (මගේ යන්ත්‍රය මත) ගත වන අතර, පසුව අතිරික්තව සිදු කළ හොත් සැලකිය යුතු වේගයකින් පසුව වේගවත් වේ, නමුත් පෙර කාර්යයන් තරම් නොවේ .


ඇත්ත වශයෙන්ම වෙනත් විකල්ප තිබේ, ඔබට මේවායින් එකක් ඔබේම ක්‍රියාකාරිත්වයට ඔතා ගත හැකිය, නමුත් මෙය සමහර ජනප්‍රිය ඒවා විශ්ලේෂණාත්මක පෙනුමක් ලබා දෙයි.


අපව රැකබලා ගැනීම ගැන ස්තූතියි (C ++ 98 පරිශීලකයින්)
A. B

@AB මට ඉවසා සිටිය නොහැක තවමත් C ++ 98 පරිශීලකයින් ඉතිරිව ඇත.
කොටස්කාස්

@VladislavToncharov ඔබේ කාර්යය තනිකරම පැරණි උපකරණ සහ කේත සඳහා සහාය වන විට, ඔබ නැවුම් කර්මාන්ත ප්‍රමිතීන් භාවිතා කරමින් පැරණි දේවල් සමඟ පොරබදයි. ගිම්හානයකට පෙර, මම පයිතන් 2.3 හි කේත ලිවීමි.
ජෝෂුවා ඩෙට්විලර්

Os ජෝෂුවා ඩෙට්විලර් ඔහ්, ඒක අමතක වුනා, සමාවෙන්න.
කොටස්කාස්

6

සී ++ 17 std::to_charsඉහළ කාර්යසාධනයක් සහිත ස්ථාන-ස්වාධීන විකල්පයක් ලෙස සපයයි .


3

කෙනෙකුට මැස්ස මත නූල් රචනා කිරීමට ඉඩ සලසන සින්ටැක්ටිකල් සීනි ටිකක් එකතු කිරීම තරමක් පහසුය

#include <string>
#include <sstream>

struct strmake {
    std::stringstream s;
    template <typename T> strmake& operator << (const T& x) {
        s << x; return *this;
    }   
    operator std::string() {return s.str();}
};

දැන් ඔබට අවශ්‍ය ඕනෑම දෙයක් එකතු කළ හැකිය (ඒ සඳහා ක්‍රියාකරුවෙකු << (std::ostream& ..)අර්ථ දක්වා තිබේ නම්) strmake()ඒ වෙනුවට එය භාවිතා කළ හැකිය std::string.

උදාහරණයක්:

#include <iostream>

int main() {
    std::string x =
      strmake() << "Current time is " << 5+5 << ":" << 5*5 << " GST";
    std::cout << x << std::endl;
}

2

සංස්කරණය කරන ලදි. ඔබට අවශ්ය නම් වේගයෙන් සමඟ පූර්ණ සංඛ්යාවක් බවට පරිවර්තනය ඉලක්කම් ස්ථාවර අංකය * කටු කිරීමට ඉතිරි-ආවරණයකින් සමන්විත '0' සමග , මේ පුංචි-endian ආකෘතීන් (සියළුම x86, x86_64 සහ වෙනත් අය) සඳහා උදාහරණයක්:

ඔබ ඉලක්කම් දෙකක අංකයක් පරිවර්තනය කරන්නේ නම්:

int32_t s = 0x3030 | (n/10) | (n%10) << 8;

ඔබ ඉලක්කම් තුනක අංකයක් පරිවර්තනය කරන්නේ නම්:

int32_t s = 0x303030 | (n/100) | (n/10%10) << 8 | (n%10) << 16;

ඔබ ඉලක්කම් හතරක අංකයක් පරිවර්තනය කරන්නේ නම්:

int64_t s = 0x30303030 | (n/1000) | (n/100%10)<<8 | (n/10%10)<<16 | (n%10)<<24;

අංක හත දක්වා සංඛ්‍යා එසේ වේ. මෙම උදාහරණයේ nදී දී ඇති පූර්ණ සංඛ්‍යාවක් ඇත. පරිවර්තනය කිරීමෙන් පසු එහි නූල් නිරූපණය පහත පරිදි ප්‍රවේශ කළ හැකිය (char*)&s:

std::cout << (char*)&s << std::endl;

සටහන: ඔබට එය විශාල-එන්ඩියන් බයිට් අනුපිළිවෙලින් අවශ්‍ය නම්, මම එය අත්හදා බැලුවේ නැත, නමුත් මෙන්න උදාහරණයක්: ඉලක්කම් තුනේ අංකයක් සඳහා එය int32_t s = 0x00303030 | (n/100)<< 24 | (n/10%10)<<16 | (n%10)<<8;ඉලක්කම් හතරේ අංක සඳහා (බිට් 64 ආරුක්කු) වේ: int64_t s = 0x0000000030303030 | (n/1000)<<56 | (n/100%10)<<48 | (n/10%10)<<40 | (n%10)<<32;එය ක්‍රියාත්මක විය යුතු යැයි මම සිතමි.


2
බයිට් ඇණවුම ගැන කුමක් කිව හැකිද?
shjeff

1
@shjeff අදහස් දැක්වීමට ස්තූතියි, මම පිළිතුරට අවසානය පිළිබඳ සටහනක් එක් කළෙමි.
ඇලෙක්

මෙය පෙන්වා දීම ගැන ස්තූතියි, මට මේ සම්බන්ධයෙන් කිසිදු ගැටළුවක් නොතිබුණද, ඔබ හරි. මම පිළිතුර තරමක් වෙනස් කළ නිසා එය දැඩි අන්වර්ථ නීති රීති වලට අනුකූල වේ.
ඇලෙක්

1

භාවිත:

#define convertToString(x) #x

int main()
{
    convertToString(42); // Returns const char* equivalent of 42
}

3
සමහර විට ප්‍රයෝජනවත් වුවද විචල්‍ය අන්තර්ගතයන් තක්සේරු නොකරයි.
වුල්ෆ්

හරි. නමුත් නිසැකවම වේලාවට
පහසුය

1
ප්රායෝගික නියත සංඛ්යා පමණක් බැදීමකට වැඩ, මම විශ්රාම වැටුප් විචල්ය නිඛිල යොදාගෙන, ගතික පරිවර්තනය කිරීම සඳහා රසවින්දා
Ing. ජෙරාර්ඩෝ සාන්චෙස්

0

මම භාවිතා කරන්නේ:

int myint = 0;
long double myLD = 0.0;

string myint_str = static_cast<ostringstream*>(&(ostringstream() << myint))->str();
string myLD_str = static_cast<ostringstream*>(&(ostringstream() << myLD))->str();

එය මගේ වින්ඩෝස් සහ ලිනක්ස් ජී ++ සම්පාදක මත ක්‍රියා කරයි.


0

මෙන්න තවත් පහසු ක්‍රමයක්

char str[100];
sprintf(str, "%d", 101);
string s = str;

sprintf ඕනෑම දත්තයක් අවශ්‍ය ආකෘතියේ නූලකට ඇතුළු කිරීම සඳහා ප්‍රසිද්ධ එකක්.

char *තෙවන පේළියේ පෙන්වා ඇති පරිදි ඔබට අරාව නූල් බවට පරිවර්තනය කළ හැකිය .


0

මෙය මට වැඩ කළා -

මගේ කේතය:

#include <iostream>
using namespace std;

int main()
{
    int n = 32;
    string s = to_string(n);
    cout << "string: " + s  << endl;
    return 0;
}

අත්යවශ්යයෙන්ම කුමක් භාවිතා කරන්නේද? stringstream?
පීටර් මෝර්ටෙන්සන්

EtPeterMortensen පරිස්සමින් බලන්න, ඒstd::to_string()
කොටස්කාස්

මට තියෙනවා using namespace std;:)
ගොන්සාලෝ ගරිඩෝ

0

std::to_string()සංඛ්‍යාත්මක වර්ග සඳහා හඳුන්වා දුන් සී ++ 11 :

int n = 123; // Input, signed/unsigned short/int/long/long long/float/double
std::string str = std::to_string(n); // Output, std::string

4
හායි! මෙය ප්‍රශ්නයට පිළිතුරක් සපයන්නේ ඇයි සහ කෙසේද යන්න පිළිබඳ පැහැදිලි කිරීමක් එක් කළ හැකිද?
නෝඩ්

0

භාවිත:

#include<iostream>
#include<string>

std::string intToString(int num);

int main()
{
    int integer = 4782151;

    std::string integerAsStr = intToString(integer);

    std::cout << "integer = " << integer << std::endl;
    std::cout << "integerAsStr = " << integerAsStr << std::endl;

    return 0;
}

std::string intToString(int num)
{
    std::string numAsStr;

    while (num)
    {
        char toInsert = (num % 10) + 48;
        numAsStr.insert(0, 1, toInsert);

        num /= 10;
    }
    return numAsStr;
}

1
N≤0 සඳහා සම්පූර්ණයෙන්ම අසමත් වේ
ටෝබි

0

int i = 255; std::string s = std::to_string(i);

C ++ හි, to_string () මඟින් අක්ෂර අනුක්‍රමයක් ලෙස අගය නිරූපණය කිරීමෙන් පූර්ණ සංඛ්‍යා අගයේ තන්තු වස්තුවක් නිර්මාණය වේ.


1
මෙම කේතය මඟින් OP හි ගැටළුව විසඳිය හැකි අතර, ඔබේ කේතය OP හි ගැටලුවට ආමන්ත්‍රණය කරන්නේ කෙසේද යන්න පිළිබඳ පැහැදිලි කිරීමක් ඇතුළත් කිරීම වඩාත් සුදුසුය. මේ ආකාරයෙන්, අනාගත අමුත්තන්ට ඔබගේ ලිපියෙන් ඉගෙන ගත හැකි අතර එය ඔවුන්ගේම කේතයට යොදන්න. SO යනු කේතීකරණ සේවාවක් නොව දැනුම සඳහා සම්පතකි. එසේම, උසස් තත්ත්වයේ, සම්පූර්ණ පිළිතුරු ඉහළ නැංවීමට වැඩි ඉඩක් ඇත. මෙම විශේෂාංග, සියලුම තනතුරු ස්වයං අන්තර්ගතය යන අවශ්‍යතාව සමඟ, වේදිකාවක් ලෙස SO හි සමහර ශක්තීන් වන අතර එය සංසද වලින් වෙනස් වේ. අමතර තොරතුරු එකතු කිරීමට සහ / හෝ ඔබේ පැහැදිලි කිරීම් මූලාශ්‍ර ලේඛන සමඟ අතිරේකව සංස්කරණය කිරීමට ඔබට සංස්කරණය කළ හැකිය.
ysf

-1
string number_to_string(int x) {

    if (!x)
        return "0";

    string s, s2;
    while(x) {
        s.push_back(x%10 + '0');
        x /= 10;
    }
    reverse(s.begin(), s.end());
    return s;
}

1
සීමිත කෙටිකාලීන උදව් ලබා දිය හැකි මෙම කේත ස්නිපටයට ස්තූතියි. නිසි පැහැදිලි කිරීමක් මෙම ගැටලුවට හොඳ විසඳුමක් වන්නේ මන්දැයි පෙන්වීමෙන් එහි දිගුකාලීන වටිනාකම බෙහෙවින් වැඩි දියුණු කරනු ඇති අතර අනාගත පා readers කයන්ට වෙනත් සමාන ප්‍රශ්න සමඟ එය වඩාත් ප්‍රයෝජනවත් වනු ඇත. ඔබ කළ උපකල්පන ද ඇතුළුව යම් පැහැදිලි කිරීමක් එක් කිරීමට කරුණාකර ඔබේ පිළිතුර සංස්කරණය කරන්න.
ටෝබි ස්පයිට්

N≤0 සඳහා සම්පූර්ණයෙන්ම අසමත් වේ
ටෝබි

අදහස් එකතු කරන්න, ඔබේ පිළිතුර පැහැදිලි කරන්න, පිළිතුරු දිය යුතු ආකාරය කියවන්න .
ඇක්සන් පී

-1

ඔබ MFC භාවිතා කරන්නේ නම් , ඔබට මෙය භාවිතා කළ හැකිය CString:

int a = 10;
CString strA;
strA.Format("%d", a);

8
මෙය මයික්‍රොසොෆ්ට් පමණක් දිගුවක් බව ඔබ සටහන් කළ යුතුය: msdn.microsoft.com/en-us/library/ms174288.aspx
ජොනී ජේඩී

1
CString :: ආකෘතිය () හි අදහසට මම කැමතියි. අවාසනාවට එය අතේ ගෙන යා නොහැකි එම්එස් පමණි.
නික්

1
වසර 5 කට පසුව මම ඒ සඳහා අවතක්සේරු කර ඇති බැවින් ඔබේ අදහස් @ ජොනී ජේඩී වෙතින් තොරතුරු ඇතුළත් කිරීමට මම මගේ පිළිතුර යාවත්කාලීන කර ඇත්තෙමි ..
Tur1ng

-2
char * bufSecs = new char[32];
char * bufMs = new char[32];
sprintf(bufSecs, "%d", timeStart.elapsed()/1000);
sprintf(bufMs, "%d", timeStart.elapsed()%1000);

12
මතකය කාන්දු වේ, -1 මා වෙතින්
paulm

මෙය ගඳ බෆරය ඉක්මවා ගිය බවක් දැනේ.
කොටස්කාස්

-2
namespace std
{
    inline string to_string(int _Val)
    {   // Convert long long to string
        char _Buf[2 * _MAX_INT_DIG];
        snprintf(_Buf, "%d", _Val);
        return (string(_Buf));
    }
}

ඔබට දැන් භාවිතා කළ හැකිය to_string(5).


10
මෙම විසඳුම ක්රියා කරන අතර, එය අතිශයින් අධෛර්යමත් වේ! යටි ඉරි වලින් ආරම්භ වන නම් සහ ලොකු අකුරක් සම්පාදකයා සඳහා වෙන් කර ඇත, ඔබ ඒවා කිසි විටෙකත් භාවිතා නොකළ යුතුය. stdනාම අවකාශයට කාර්යයන් එන්නත් කිරීම ඔබ කළ යුතු දෙයක් නොවේ. එසේම, එය _MAX_INT_DIGසම්මත සාර්වයක් ලෙස නොපෙනේ , එබැවින් එය වැරදි ලෙස අර්ථ දක්වා ඇත්නම්, මෙම කේතයට නිර්වචනය නොකළ හැසිරීම් ඇති කිරීමේ විශාල විභවයක් ඇත. -1
iFreilicht

6
_MAX_INT_DIG යනු කුමක්ද සහ එය දෙගුණ කරන්නේ ඇයි?
පෝල්ම්

-2

මම හිතන්නේ භාවිතා stringstreamකිරීම පහසුයි:

 string toString(int n)
 {
     stringstream ss(n);
     ss << n;
     return ss.str();
 }

 int main()
 {
    int n;
    cin >> n;
    cout << toString(n) << endl;
    return 0;
 }

ප්රශ්නයේ මෙය සඳහන් කර ඇති අතර අවාසනාවකට තරමක් මන්දගාමී වේ.
කොටස්කාස්

-3

නූලකට පරිවර්තනය කිරීම සඳහා ඔබ ප්‍රති-ඇල්ගොරිතම වර්ගයක් භාවිතා කරයි. මට මෙම තාක්ෂණය ලැබුණේ කොමඩෝර් 64 පරිගණක ක්‍රමලේඛයෙන් . එය ක්‍රීඩා වැඩසටහන් සඳහා ද හොඳ ය.

  • ඔබ නිඛිලය ගෙන 10 බලයෙන් බර වන සෑම අංකයක්ම ගන්න. එබැවින් නිඛිලය 950 යැයි උපකල්පනය කරන්න.

    • නිඛිලය සමාන හෝ 100,000 ට වඩා වැඩි නම් 100,000 අඩු කර ["000000"] නූලෙහි කවුන්ටරය වැඩි කරන්න;
      100,000 ස්ථානයේ තවත් සංඛ්‍යාවක් නොමැති තෙක් එය දිගටම කරගෙන යන්න. තවත් දහයක බලයක් අතහරින්න.

    • නිඛිලය සමාන හෝ 10,000 ට වඩා වැඩි නම් 10,000 අඩු කර නූලෙහි කවුන්ටරය ["000000"] + 1 ස්ථානයේ වැඩි කරන්න;
      10,000 වන ස්ථානයේ තවත් සංඛ්‍යාවක් නොමැති තෙක් එය දිගටම කරගෙන යන්න.

  • තවත් දහයක බලයක් අතහරින්න

  • රටාව නැවත කරන්න

950 උදාහරණයක් ලෙස භාවිතා කිරීමට නොහැකි තරම් කුඩා බව මම දනිමි, නමුත් ඔබට අදහස ලැබෙනු ඇතැයි මම බලාපොරොත්තු වෙමි.


කේතයේ උදාහරණයක් පෙන්වීමට වඩා ඇල්ගොරිතමයක් විස්තර කිරීම එතරම් ප්‍රයෝජනවත් නොවේ.
cdeerinck
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.