c string conversion functions
Tento výukový program zahrnuje funkce převodu řetězců C ++, které lze použít k převodu řetězce na int & double a int na řetězec atd .:
Při vývoji aplikací v C ++ je běžné převádět řetězce na čísla jako integer a double.
Toto téma popisuje funkce, které lze použít k efektivnímu převodu řetězců na int & dvojité a číselné hodnoty na řetězec.
=> Přečtěte si zde populární sérii školení C ++.
Co se naučíte:
Funkce převodu řetězce C ++
Když programujeme aplikace pomocí C ++, je nutné převádět data z jednoho typu na jiný. Konverze dat by měla být taková, aby se při převodu stávajících dat na nový typ neztratila vůbec žádná data. To platí zejména při převodu řetězcových dat na čísla a naopak.
V tomto kurzu probereme různé funkce pro převod objektu std :: string na číselné datové typy včetně integer a double.
Převést řetězec na číselné typy v C ++
Obecně existují dvě běžné metody převodu řetězce na čísla v C ++.
klidné webové služby testující otázky na pohovor
- Používání funkcí stoi a atoi, které se replikují pro všechny číselné datové typy.
- Používání třídy stringstream.
Pojďme si podrobně promluvit o každé metodě.
Používání funkcí stoi a atoi
třída std :: string podporuje různé funkce pro převod řetězce na celé číslo, long, double, float atd. Konverzní funkce podporované std :: string jsou tabularizovány následovně:
Funkce | Popis |
---|---|
stojící stol stoll | Převede řetězec na celé číslo (včetně dlouhých a dlouhých dlouhých typů). |
atoi atol atol | Převede bajtový řetězec na celé číslo (včetně dlouhých a dlouhých dlouhých typů). |
stál prach stold | Převede bajtový řetězec na hodnoty s plovoucí desetinnou čárkou (včetně float, double a long double). |
špatně stoull | Převede bajtový řetězec na celé číslo bez znaménka (včetně nepodepsaného dlouhého a nepodepsaného dlouhého dlouhého typu). |
Poznámka: Kromě funkcí pro převod bajtového řetězce (atoi) jsou všechny ostatní převodní funkce k dispozici od C ++ 11 a dále. Nyní probereme funkce převodu pro převod řetězce na int a řetězce na dvojnásobek.
String to int Používání stoi () a atoi ()
stojící()
Funkční prototyp: stoi (const std :: string & str, std :: size_t * pos = 0, int base = 10);
Parametry:
str => Řetězec pro převod
pos => Adresa celého čísla pro uložení počtu zpracovaných znaků; výchozí = 0
base => Číselná základna; výchozí = 0
Návratová hodnota: Celé číslo ekvivalentní zadanému řetězci.
Výjimky: std :: invalid_argument => Pokud nelze provést převod.
Std :: out_of_range => Pokud je převedená hodnota mimo rozsah rozsahu typu výsledku.
Popis: Funkce stoi () vezme řetězec jako argument a vrátí celočíselnou hodnotu. Vyvolá výjimku, pokud je převedená hodnota mimo rozsah nebo pokud převod nelze provést.
Vezměme si příklad programování, abychom této funkci lépe porozuměli.
#include #include using namespace std; int main() { string mystr1 = '53'; string mystr2 = '3.142'; string mystr3 = '31477 with char'; int strint1 = stoi(mystr1); int strint2 = stoi(mystr2); int strint3 = stoi(mystr3); cout << 'stoi('' << mystr1 << '') is ' << strint1 << '
'; cout << 'stoi('' << mystr2 << '') is ' << strint2 << '
'; cout << 'stoi('' << mystr3 << '') is ' << strint3 << '
'; }
Výstup:
stojany („53“) je 53
stojany („3,142“) je 3
stoi („31477 s char“) je 31477
Ve výše uvedeném programu jsme použili funkci stoi se třemi různými řetězci. Všimněte si, že při převodu dat řetězce na celočíselnou hodnotu funkce zahodí mezery nebo jiné znaky.
Proto v případě mystr2 (3.142) funkce zahodila vše za desetinnou čárkou. Podobně v případě mystr3 („31477 s char“) bylo vzato v úvahu pouze číslo. Ostatní obsah řetězce byl vyřazen.
atoi ()
Funkční prototyp: int atoi (const char * str);
Parametry: str => Ukazatel na bajtový řetězec zakončený nulou.
Návratová hodnota:
Úspěch => Celočíselná hodnota odpovídající argumentu str.
Selhání => Nedefinováno, pokud je převedená hodnota mimo rozsah.
0 => Pokud nelze provést převod.
Popis: Tato funkce převádí bajtový řetězec na celočíselnou hodnotu. Funkce atoi () zahodí všechny mezery, dokud nenarazí na znak, který není mezerou, a poté jednotlivé znaky postupně vytvoří platnou celočíselnou číselnou reprezentaci a převede ji na celé číslo.
Příklad funkce atoi
#include #include using namespace std; int main() { const char *mystr1 = '24'; const char *mystr2 = '3.142'; const char *mystr3 = '23446 with char'; const char *mystr4 = 'words with 3'; int mynum1 = atoi(mystr1); int mynum2 = atoi(mystr2); int mynum3 = atoi(mystr3); int mynum4 = atoi(mystr4); cout << 'atoi('' << mystr1 << '') is ' << mynum1 << '
'; cout << 'atoi('' << mystr2 << '') is ' << mynum2 << '
'; cout << 'atoi('' << mystr3 << '') is ' << mynum3 << '
'; cout << 'atoi('' << mystr4 << '') is ' << mynum4 << '
'; }
Výstup:
atoi („24“) je 24
atoi („3.142“) je 3
atoi („23446 s char“) je 23446
atoi („slova s 3“) je 0
Jak je uvedeno ve výše uvedeném programu, funkce atoi převezme bajtový řetězec jako argument a převede jej na celočíselnou hodnotu. Mezery nebo jiné znaky jsou zahozeny. Pokud je převedená hodnota mimo rozsah, vrátí se 0.
Řetězec pro zdvojnásobení pomocí stod ()
Funkční prototyp: stod (const std :: string & str, std :: size_t * pos = 0);
Parametry:
str => Řetězec pro převod
pos => Adresa celého čísla pro uložení počtu zpracovaných znaků; výchozí = 0
Návratová hodnota: Dvojitá hodnota odpovídající zadanému řetězci.
Výjimky:
std :: invalid_argument => Pokud nelze provést převod.
std :: out_of_range => Pokud je převedená hodnota mimo rozsah rozsahu typu výsledku.
Popis: Tato funkce převádí řetězec na hodnotu s plovoucí desetinnou čárkou. Funkce stod () zahodí všechny mezery, dokud nenarazí na znak, který není mezerou, a poté jednotlivé znaky postupně vytvoří platnou reprezentaci čísla s plovoucí desetinnou čárkou a převede ji na plovoucí desetinnou čárku.
Podívejme se na příklad demonstrující tuto funkci.
#include #include using namespace std; int main() { const char *mystr1 = '24'; const char *mystr2 = '3.142'; const char *mystr3 = '23446 with char'; double mynum1 = stod(mystr1); double mynum2 = stod(mystr2); double mynum3 = stod(mystr3); cout << 'stod('' << mystr1 << '') is ' << mynum1 << '
'; cout << 'stod('' << mystr2 << '') is ' << mynum2 << '
'; cout << 'stod('' << mystr3 << '') is ' << mynum3 << '
'; }
Výstup:
stod („24“) je 24
stod („3,142“) je 3,142
stod („23446 s char“) je 23446
Výše uvedený program demonstruje použití funkce „stod“. Výstup označuje převedené dvojité hodnoty zadaných řetězců.
Používání třídy stringstream
Použití třídy stringstream je nejjednodušší způsob převodu řetězcových hodnot na číselné hodnoty.
Třídu stringstream se budeme učit podrobně v našich dalších výukách. Níže je uveden program C ++, který demonstruje převod řetězce na číselné hodnoty.
#include #include using namespace std; int main() { string str = '2508'; stringstream sstream(str); int num = 0; sstream >> num; double dNum=0.0; string doublestr = '3.142'; stringstream dstream(doublestr); dstream >>dNum; cout << 'Value of num : ' << num< Výstup:
Hodnota num: 2508
Hodnota dNum: 3,142
Ve výše uvedeném programu vidíme, že jsme deklarovali objekt řetězce. Pak deklarujeme objekt řetězce a předáme řetězec tomuto objektu, aby byl řetězec převeden na objekt řetězce. Pak je tento objekt stringstream předán celočíselné hodnotě pomocí operátoru „>>“, který převede objekt stringstream na celé číslo.
Podobně jsme také převedli řetězec na dvojitý. Takže pokud operátor „>>“ podporuje datový typ, můžeme převést řetězec na libovolný datový typ pomocí objektu stringstream.
Převést int na řetězec v C ++
Můžeme také převést číselné hodnoty na řetězcové hodnoty. Existují dvě metody převodu číselných hodnot na hodnoty řetězců a budeme o nich diskutovat níže.
Pomocí funkce to_string ()
Funkční prototyp: std :: string to_string (hodnota typu);
Parametry: value => Číselná hodnota k převodu
Návratová hodnota: Řetězcová hodnota obsahující převedenou hodnotu.
Výjimka: může hodit std :: bad_alloc
Popis: Tato funkce to_string () převede číselnou hodnotu předanou jako argument na typ řetězce a vrátí řetězec.
Podívejme se na příklad této funkce pomocí programu C ++.
#include #include // used for string and to_string() using namespace std; int main() { int int_val = 20; float flt_val = 30.50; string str_int = to_string(int_val); string str_float = to_string(flt_val); cout << 'The string representation of integer : '; cout << str_int << endl; cout << 'The string representation of float : '; cout << str_float << endl; return 0; }
Výstup:
Řetězcové vyjádření celého čísla: 20 Řetězcové vyjádření floatu: 30 500 000
Zde máme dvě proměnné, každou typu integer a float. Pak dvakrát zavoláme metodu to_string s argumentem integer a float a obě hodnoty převedeme na hodnoty řetězce. Nakonec zobrazíme převedené hodnoty.
Všimněte si, že převod hodnoty s plovoucí desetinnou čárkou na řetězec může poskytnout neočekávané výsledky, protože počet platných číslic může být u metody to_string nulový.
Používání třídy stringstream
Pomocí třídy stringstream nejprve stringstream deklaruje objekt proudu, který vloží číselnou hodnotu jako proud do objektu. Potom pomocí funkce „str ()“ interně převede číselnou hodnotu na řetězec.
Příklad:
#include #include #include using namespace std; int main() { int num = 26082019; double num_d = 3.142; ostringstream mystr; ostringstream my_dstr; mystr << num; string resultstr = mystr.str(); my_dstr << num_d; string d_str = my_dstr.str(); cout << 'The string formed from integer is : '; cout << resultstr << endl; cout << 'The string formed from double is : '; cout << d_str << endl; return 0; } #include #include #include using namespace std; int main() { int num = 26082019; double num_d = 3.142; ostringstream mystr; ostringstream my_dstr; mystr << num; string resultstr = mystr.str(); my_dstr << num_d; string d_str = my_dstr.str(); cout << 'The string formed from integer is : '; cout << resultstr << endl; cout << 'The string formed from double is : '; cout << d_str << endl; return 0; }
Výstup:
Řetězec vytvořený z celého čísla je: 26082019
Řetězec vytvořený z dvojitého je: 3.142
V tomto seznamu jsme definovali celé číslo a dvojitou hodnotu. Pak máme objekt ostringstream, pomocí kterého převedeme číselnou hodnotu na objekt stringstream. Toto používá ‚<<’ operator. Next, we use the str() method on a stringstream object to convert it to a string.
Závěr
V tomto kurzu jsme probrali funkce převodu, které převádějí řetězec na číselné typy a číselné typy zpět na řetězec. Podrobně jsme viděli funkce a příklady funkcí stoi (), stod (), atoi (), to_string (). Také jsme diskutovali o některých funkcích a metodách třídy stringstream, které nám pomáhají provádět uvedené převody.
Doporučené čtení = >> Převést řetězec na celé číslo v Javě a Metody pro převod Int na String v Javě
V našem dalším kurzu se naučíme funkce převodu pro datové typy znaků.
=> Podívejte se na výukové návody do hloubky C ++ zde.
nejlepší bezplatný převaděč souborů pro Windows 10
Doporučené čtení
- Funkce řetězce Python
- Funkce převodu znaků v C ++: char to int, char to string
- Výukový program Java String s funkcí String Buffer a String Builder
- Řetězcové funkce v C ++: getline, podřetězec, délka řetězce a další
- C # Convert String to Int using Parse, Convert & TryParse Methods
- Funkce řetězce VBScript: Funkce VBScript inStr, Replace, Mid a Trim
- Výukový program pro rozdělení řetězce Python
- C # String Tutorial - Metody řetězců s příklady kódu