Ejemplos prácticos de conversión
Escenarios de conversión
stringstream proporciona poderosas capacidades de conversión de tipos entre diferentes tipos de datos.
Conversiones de cadena a numérico
Cadena a entero
std::string str = "42";
std::stringstream ss(str);
int number;
ss >> number; // number = 42
Cadena a doble
std::string str = "3.14159";
std::stringstream ss(str);
double value;
ss >> value; // value = 3.14159
Conversiones de numérico a cadena
Entero a cadena
std::stringstream ss;
int number = 123;
ss << number;
std::string str = ss.str(); // str = "123"
Conversión de múltiples tipos
std::stringstream ss;
int age = 30;
double height = 1.75;
std::string name = "John";
ss << "Name: " << name
<< ", Age: " << age
<< ", Height: " << height;
std::string result = ss.str();
Flujo de trabajo de conversión compleja
graph TD
A[Input String] --> B[Stringstream]
B --> C{Parse/Convert}
C --> D[Multiple Data Types]
D --> E[Processed Output]
Técnicas de conversión
| Técnica |
Entrada |
Salida |
Ejemplo |
| Cadena a entero |
"123" |
Entero |
123 |
| Cadena a flotante |
"3.14" |
Flotante |
3.14 |
| Entero a cadena |
42 |
"42" |
Conversión |
Prácticas de conversión segura
bool safeConvert(const std::string& input, int& result) {
std::stringstream ss(input);
return !!(ss >> result);
}
int main() {
std::string str = "456";
int number;
if (safeConvert(str, number)) {
std::cout << "Converted: " << number << std::endl;
} else {
std::cout << "Conversion failed" << std::endl;
}
return 0;
}
Análisis de estructuras de datos complejas
struct Person {
std::string name;
int age;
double salary;
};
Person parsePerson(const std::string& data) {
std::stringstream ss(data);
Person p;
std::getline(ss, p.name, ',');
ss >> p.age;
ss.ignore(); // Skip comma
ss >> p.salary;
return p;
}
int main() {
std::string personData = "John Doe,35,50000.50";
Person person = parsePerson(personData);
}
Escenarios de conversión avanzados
Análisis de CSV
std::vector<std::string> splitCSV(const std::string& line) {
std::vector<std::string> result;
std::stringstream ss(line);
std::string item;
while (std::getline(ss, item, ',')) {
result.push_back(item);
}
return result;
}
Manejo de errores en conversiones
bool validateConversion(const std::string& input) {
std::stringstream ss(input);
int value;
// Check if conversion is possible
return (ss >> value) && ss.eof();
}
¡Explora más técnicas avanzadas de C++ con los entornos de programación interactivos de LabEx!