Exemplos Práticos de Conversão
Cenários de Conversão
Stringstream fornece capacidades poderosas de conversão de tipos entre diferentes tipos de dados.
Conversões de String para Numérico
String para Inteiro
std::string str = "42";
std::stringstream ss(str);
int number;
ss >> number; // number = 42
String para Double
std::string str = "3.14159";
std::stringstream ss(str);
double value;
ss >> value; // value = 3.14159
Conversões Numérico para String
Inteiro para String
std::stringstream ss;
int number = 123;
ss << number;
std::string str = ss.str(); // str = "123"
Conversão de Múltiplos Tipos
std::stringstream ss;
int idade = 30;
double altura = 1.75;
std::string nome = "João";
ss << "Nome: " << nome
<< ", Idade: " << idade
<< ", Altura: " << altura;
std::string resultado = ss.str();
Fluxo de Conversão Complexo
graph TD
A[String de Entrada] --> B[Stringstream]
B --> C{Analisar/Converter}
C --> D[Múltiplos Tipos de Dados]
D --> E[Saída Processada]
Técnicas de Conversão
| Técnica |
Entrada |
Saída |
Exemplo |
| String para Int |
"123" |
Inteiro |
123 |
| String para Float |
"3.14" |
Float |
3.14 |
| Int para String |
42 |
"42" |
Conversão |
Práticas de Conversão Segura
bool converterSeguro(const std::string& entrada, int& resultado) {
std::stringstream ss(entrada);
return !!(ss >> resultado);
}
int main() {
std::string str = "456";
int numero;
if (converterSeguro(str, numero)) {
std::cout << "Convertido: " << numero << std::endl;
} else {
std::cout << "Conversão falhou" << std::endl;
}
return 0;
}
Análise de Estruturas de Dados Complexas
struct Pessoa {
std::string nome;
int idade;
double salario;
};
Pessoa analisarPessoa(const std::string& dados) {
std::stringstream ss(dados);
Pessoa p;
std::getline(ss, p.nome, ',');
ss >> p.idade;
ss.ignore(); // Ignorar vírgula
ss >> p.salario;
return p;
}
int main() {
std::string dadosPessoa = "João Doe,35,50000.50";
Pessoa pessoa = analisarPessoa(dadosPessoa);
}
Cenários de Conversão Avançados
Análise de CSV
std::vector<std::string> dividirCSV(const std::string& linha) {
std::vector<std::string> resultado;
std::stringstream ss(linha);
std::string item;
while (std::getline(ss, item, ',')) {
resultado.push_back(item);
}
return resultado;
}
Tratamento de Erros em Conversões
bool validarConversao(const std::string& entrada) {
std::stringstream ss(entrada);
int valor;
// Verificar se a conversão é possível
return (ss >> valor) && ss.eof();
}
Explore técnicas mais avançadas de C++ com os ambientes de programação interativos do LabEx!