Exemples pratiques de conversion
Scénarios de conversion
stringstream offre des capacités puissantes de conversion de type entre différents types de données.
Conversions de chaîne en nombre
Conversion de chaîne en entier
std::string str = "42";
std::stringstream ss(str);
int number;
ss >> number; // number = 42
Conversion de chaîne en double
std::string str = "3.14159";
std::stringstream ss(str);
double value;
ss >> value; // value = 3.14159
Conversions de nombre en chaîne
Conversion d'entier en chaîne
std::stringstream ss;
int number = 123;
ss << number;
std::string str = ss.str(); // str = "123"
Conversion de plusieurs types
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();
Flux de travail de conversion complexe
graph TD
A[Chaîne d'entrée] --> B[Stringstream]
B --> C{Analyser/Convertir}
C --> D[Plusieurs types de données]
D --> E[Sortie traitée]
Techniques de conversion
| Technique |
Entrée |
Sortie |
Exemple |
| Chaîne en entier |
"123" |
Entier |
123 |
| Chaîne en flottant |
"3.14" |
Flottant |
3.14 |
| Entier en chaîne |
42 |
"42" |
Conversion |
Bonnes pratiques pour les conversions sûres
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;
}
Analyse de structures de données complexes
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);
}
Scénarios de conversion avancés
Analyse de fichiers 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;
}
Gestion des erreurs dans les conversions
bool validateConversion(const std::string& input) {
std::stringstream ss(input);
int value;
// Check if conversion is possible
return (ss >> value) && ss.eof();
}
Explorez des techniques C++ plus avancées avec les environnements de programmation interactifs de LabEx !