c string conversion functions
Aquest tutorial cobreix les funcions de conversió de cadenes C ++ que es poden utilitzar per convertir la cadena a int & double i int a una cadena, etc.:
És habitual convertir cadenes a nombres com enter i doble quan estem desenvolupant aplicacions C ++.
Aquest tema tracta les funcions que es poden utilitzar per convertir eficaçment les cadenes en valors int & dobles i numèrics en una cadena.
=> Llegiu aquí la popular sèrie de formació C ++.
Què aprendreu:
Funcions de conversió de cadenes C ++
Quan programem aplicacions amb C ++, es fa necessari convertir dades d’un tipus a un altre. La conversió de dades ha de ser tal que no es perdi cap dada quan convertim les dades existents en un tipus nou. Això és especialment cert quan convertim les dades de la cadena en números i viceversa.
En aquest tutorial, analitzarem les diverses funcions per convertir l'objecte std :: string en tipus de dades numèriques, inclosos els enters i els dobles.
Converteix la cadena en tipus numèrics en C ++
En general, hi ha dos mètodes comuns per convertir la cadena en números a C ++.
- Utilitzant funcions stoi i atoi que es repliquen per a tots els tipus de dades numèriques.
- Utilitzant la classe stringstream.
Analitzem detalladament cada mètode.
Ús de funcions stoi i atoi
La classe std :: string admet diverses funcions per convertir la cadena a enter, llarg, doble, flotant, etc. Les funcions de conversió admeses per std :: string es tabulen de la següent manera:
Funció | Descripció |
---|---|
de peu stol stoll | Converteix la cadena en enter (inclosos els tipus llargs i llargs). |
atoi atol atol | Converteix la cadena de bytes en enter (inclosos els tipus llargs i llargs). |
de peu pols stold | Converteix la cadena de bytes en valors de coma flotant (inclosos els tipus flotant, doble i llarg doble). |
stoul stoull | Converteix la cadena de bytes en enter sense signar (inclosos els tipus llargs sense signar i els llargs llargs sense signar). |
Nota: Excepte les funcions per convertir la cadena de bytes (atoi), totes les altres funcions de conversió estan presents a partir de C ++ 11. Ara parlarem de les funcions de conversió per convertir cadena a int i cadena a doble.
Cadena a int Usant stoi () i atoi ()
de peu ()
Prototip de funció: stoi (const std :: string & str, std :: size_t * pos = 0, int base = 10);
Paràmetres:
str => Cadena per convertir
pos => Adreça d'un enter per emmagatzemar el nombre de caràcters processats; per defecte = 0
base => La base del nombre; per defecte = 0
Valor de retorn: Equivalent a la cadena especificada.
Excepcions: std :: invalid_argument => Si no es pot realitzar cap conversió.
Std :: out_of_range => Si el valor convertit està fora del rang del tipus de resultat.
Descripció: La funció stoi () pren una cadena com a argument i retorna un valor enter. Llançarà una excepció si el valor convertit està fora de l'interval o si la conversió no es pot realitzar.
Prenem un exemple de programació per entendre millor aquesta funció.
#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 << '
'; }
Sortida:
stands ('53') és 53
estands ('3.142') són 3
stoi ('31477 amb char') és 31477
Al programa anterior, hem utilitzat la funció stoi amb tres cadenes diferents. Tingueu en compte que en convertir les dades de la cadena en un valor enter, la funció descarta els espais en blanc o qualsevol altre caràcter.
Per tant, en el cas de mystr2 (3.142), la funció va descartar tot després del punt decimal. De la mateixa manera, en el cas de mystr3 ('31477 amb char'), només es va tenir en compte el número. Es van descartar altres continguts de la cadena.
atoi ()
Prototip de funció: int atoi (const char * str);
Paràmetres: str => Punter a cadena de bytes acabada en nul.
Valor de retorn:
Èxit => Valor enter corresponent a l'argument str.
Error => Sense definir si el valor convertit està fora de l'interval.
0 => Si no es pot realitzar cap conversió.
Descripció: Aquesta funció converteix una cadena de bytes en un valor enter. La funció atoi () descarta els espais en blanc fins que es troba un caràcter que no és en blanc i, a continuació, pren els caràcters un per un per formar una representació de nombre enter vàlid i el converteix en un enter.
Exemple de funció 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 << '
'; }
Sortida:
atoi ('24') és 24
atoi ('3.142') és 3
atoi ('23446 amb char') és 23446
atoi ('paraules amb 3') és 0
Com es mostra al programa anterior, la funció atoi pren una cadena de bytes com a argument i la converteix en un valor enter. Es descarten els espais en blanc o qualsevol altre personatge. Si el valor convertit està fora de l'interval, es retorna 0.
Cadena per duplicar Usant stod ()
Prototip de funció: stod (const std :: string & str, std :: size_t * pos = 0);
Paràmetres:
str => Cadena per convertir
pos => Adreça d'un enter per emmagatzemar el nombre de caràcters processats; per defecte = 0
Valor de retorn: Doble valor equivalent a la cadena especificada.
Excepcions:
std :: invalid_argument => Si no es pot realitzar cap conversió.
std :: out_of_range => Si el valor convertit està fora del rang del tipus de resultat.
Descripció: Aquesta funció converteix una cadena en un valor de coma flotant. La funció stod () descarta els espais en blanc fins que es troba un caràcter que no és en blanc i, a continuació, pren els caràcters un per un per formar una representació vàlida de número de coma flotant i el converteix en coma flotant.
Vegem un exemple que demostri aquesta funció.
#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 << '
'; }
Sortida:
stod ('24') és 24
stod ('3,142') és 3,142
stod ('23446 amb caràcter') és 23446
El programa anterior mostra l’ús de la funció “stod”. La sortida indica els valors dobles convertits de les cadenes especificades.
Utilitzant stringstream Class
L’ús de classe stringstream és la forma més senzilla de convertir valors de cadena en valors numèrics.
generador de nombres aleatoris entre 0 i 1
Aprendrem la classe stringstream en detall als nostres tutorials posteriors. A continuació es mostra un programa C ++ que demostra la conversió de cadenes a valors numèrics.
#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< Sortida:
Valor del número: 2508
Valor de dNum: 3,142
Al programa anterior, veiem que hem declarat un objecte de cadena. A continuació, declarem un objecte stringstream i el passem a aquest objecte de manera que es converteixi en un objecte stringstream. A continuació, aquest objecte stringstream es passa a un valor enter mitjançant l’operador ‘>>’ que converteix l’objecte stringstream en un enter.
De la mateixa manera, també hem convertit la cadena en doble. De manera que, sempre que l’operador “>>” admeti el tipus de dades, podem convertir una cadena en qualsevol tipus de dades mitjançant un objecte stringstream.
Converteix int a cadena en C ++
També podem convertir valors numèrics en valors de cadena. Hi ha dos mètodes de conversió de valors numèrics a valors de cadenes i en parlarem a continuació.
Utilitzant la funció to_string ()
Prototip de funció: std :: string to_string (valor de tipus);
Paràmetres: value => Valor numèric a convertir
Valor de retorn: Valor de cadena que manté el valor convertit.
Excepció: pot llançar std :: bad_alloc
Descripció: Aquesta funció to_string () converteix el valor numèric passat com a argument a tipus de cadena i retorna la cadena.
Vegem un exemple d’aquesta funció mitjançant un programa 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; }
Sortida:
La representació de cadena de l'enter: 20 La representació de cadena de float: 30.500000
Aquí tenim dues variables, cadascuna de tipus enter i float. A continuació, anomenem el mètode to_string dues vegades amb argument enter i float i convertim els dos valors en valors de cadena. Finalment, mostrem els valors convertits.
Tingueu en compte que convertir el valor de coma flotant a la cadena pot donar resultats inesperats ja que el nombre de dígits significatius pot ser zero amb el mètode to_string.
Utilitzant stringstream Class
Utilitzant la classe stringstream, el stringstream declara primer un objecte de flux que insereix un valor numèric com a flux a l’objecte. A continuació, utilitza la funció 'str ()' per convertir internament un valor numèric a cadena.
Exemple:
#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; }
Sortida:
La cadena formada a partir d’un nombre enter és: 26082019
La corda formada a partir de doble és: 3.142
En aquest llistat, hem definit un valor enter i un valor doble. A continuació, tenim l’objecte ostringstream amb el qual cobrim el valor numèric a l’objecte stringstream. Això fa servir el ‘<<’ operator. Next, we use the str() method on a stringstream object to convert it to a string.
Conclusió
En aquest tutorial, hem discutit les funcions de conversió que converteixen una cadena en tipus numèric i els tipus numèrics de nou en una cadena. Hem vist detalladament les funcions i exemples de la funció stoi (), stod (), atoi (), to_string (). També hem debatut sobre algunes de les funcions i mètodes de la classe stringstream que ens ajuden a fer les conversions esmentades.
Lectura recomanada = >> Converteix la cadena a enter en Java i Mètodes per convertir Int a String a Java
Al nostre següent tutorial, aprendrem les funcions de conversió per als tipus de dades de caràcters.
=> Consulteu aquí els tutorials de formació en profunditat C ++.
Lectura recomanada
- Funcions de cadena de Python
- Funcions de conversió de caràcters C ++: char a int, char a string
- Java String amb buffer de cadenes i tutorial de Generador de cadenes
- Funcions de cadena a C ++: getline, subcadena, longitud de cadena i més
- C # Converteix la cadena a int mitjançant mètodes Parse, Convert & TryParse
- Funcions de cadenes VBScript: funcions VSScript inStr, Replace, Mid i Trim
- Tutorial de Python String Split
- Tutorial de cadenes C #: mètodes de cadenes amb exemples de codi