Автор Тема: Преобразование типов в строку и обратно  (Прочитано 9068 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн #535

  • Действительный статский советник
  • *****
  • Сообщений: 1794
  • Репутация: 38
  • Пол: Мужской
  • Make scene,not war!
Уже давно хотел написать, так как вопрос несколько раз поднимался. Итак, кроссплатформенный вариант преобразования переменных различного типа в строку и обратно.

Код: (cpp) [Выделить]
#include <iostream>
#include <string>
#include <sstream>
using namespace std;


class my_class{
int a;
float b;

public:

my_class()
{
this->a = 0;
this->b = 0;
}

my_class(int a,float b)
{
this->a = a;
this->b = b;
}

friend ostream& operator << (ostream& os,my_class tmp)
{
os<<"\nHere we have class members:\n a = "<<tmp.a<<"\n b = "<<tmp.b;
return os;
}

};


int main(int argc,char** argv)
{

string str = "123 123.999 some_text";

int i_val = 0;
double d_val = 0;
string s_val;


// Создаем поток и инициализируем его нужной нам строкой
istringstream is_stream(str);

// Проверка, открылся ли поток
if(!is_stream)
{
cout<<"Error!\n";
return -1;
}

// Читаем и преобразуем значения из строки в переменные нужного нам типа
is_stream>>i_val>>d_val>>s_val;

// Смотрим что получилось
cout<<i_val<<" "<<d_val<<" "<<s_val<<endl;


ostringstream os_stream;
my_class mc = my_class(99,99.99f);

if(!os_stream)
{
cout<<"Error!\n";
return -1;
}

// Теперь, произведем противоположенное действие и сформируем из переменных разного типа строку
os_stream<<i_val<<" "<<d_val<<" "<<s_val<<" "<<mc;

cout<<os_stream.str()<<endl;
}