Conversia tipurilor și șirurile
Conversia într-un șir
Adesea poate apărea necesitatea de a combina un șir cu date de alte tipuri, de exemplu, cu numere. Totuși, putem combina un șir doar cu un alt șir. Prin urmare, datele de alte tipuri trebuie mai întâi convertite într-un șir. Pentru conversia într-un șir se utilizează funcția std::to_string(), căreia i se transmite valoarea de convertit:
#include <iostream>
#include <string>
int main()
{
unsigned age{38};
std::string message{ "Age: " + std::to_string(age)};
std::cout << message << std::endl; // Age: 38
}
Funcții de conversie din șir în număr
Adesea poate apărea sarcina opusă – convertirea unui șir într-un alt tip. Există o serie de funcții care convertesc un șir într-un număr de un anumit tip:
- stoi(): convertește în tipul int
- stol(): în long
- stoll(): în long long
- stoul(): în unsigned long
- stoull(): în unsigned long long
- stof(): în float
- stod(): în double
- stold(): în long double
Toate sunt definite în modulul <string>, funcționează similar și primesc ca parametru șirul de convertit:
std::string str{ "123" };
int n{ std::stoi(str) }; // n == 123
Conversia unui șir într-un pointer la caractere
La nevoie, se poate converti o valoare de tip string într-un pointer la caractere. Pentru conversia într-un pointer la un șir constant se utilizează metoda c_str():
#include <iostream>
#include <string>
int main()
{
std::string message {"hello"};
const char* message_ptr = message.c_str(); // conversie în pointer
std::cout << message_ptr << std::endl;
}
Pentru a obține un pointer se poate folosi și metoda data(), care returnează un pointer la o valoare neconstantă, dacă obiectul string nu este constant:
#include <iostream>
#include <string>
int main()
{
std::string message {"hello"};
char* message_ptr = message.data(); // conversie în pointer
std::cout << message_ptr << std::endl;
}