Практические примеры преобразования
Сценарии преобразования
stringstream
предоставляет мощные возможности по преобразованию типов между различными типами данных.
Преобразование строки в числовой тип
Преобразование строки в целое число
std::string str = "42";
std::stringstream ss(str);
int number;
ss >> number; // number = 42
Преобразование строки в число с плавающей точкой
std::string str = "3.14159";
std::stringstream ss(str);
double value;
ss >> value; // value = 3.14159
Преобразование числового типа в строку
Преобразование целого числа в строку
std::stringstream ss;
int number = 123;
ss << number;
std::string str = ss.str(); // str = "123"
Преобразование нескольких типов
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();
Сложный процесс преобразования
graph TD
A[Входная строка] --> B[Stringstream]
B --> C{Разобрать/Преобразовать}
C --> D[Несколько типов данных]
D --> E[Обработанный вывод]
Техники преобразования
Техника |
Вход |
Выход |
Пример |
Преобразование строки в целое число |
"123" |
Целое число |
123 |
Преобразование строки в число с плавающей точкой |
"3.14" |
Число с плавающей точкой |
3.14 |
Преобразование целого числа в строку |
42 |
"42" |
Преобразование |
Безопасные практики преобразования
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;
}
Разбор сложных структур данных
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(); // Пропустить запятую
ss >> p.salary;
return p;
}
int main() {
std::string personData = "John Doe,35,50000.50";
Person person = parsePerson(personData);
}
Продвинутые сценарии преобразования
Разбор 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;
}
Обработка ошибок при преобразованиях
bool validateConversion(const std::string& input) {
std::stringstream ss(input);
int value;
// Проверить, возможно ли преобразование
return (ss >> value) && ss.eof();
}
Исследуйте более продвинутые техники C++ с помощью интерактивных программистских сред LabEx!