По непонятной мне причине(или я ошибаюсь) в Linux отсутствует функция itoa - пробразование числа в строку,
хотя и реализована atoi - преобразование строки в число.
Для пробразования числа в строку рекомендутся использовать sprintf, как описано тут http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/
/* sprintf example */
#include <stdlib.h>
int main ()
{
char buffer [50];
int n, a=5, b=3;
n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);
printf ("[%s] is a %d char long string\n",buffer,n);
return 0;
}
Но мне этот метод не очень нравится из-за громоздкости и надобности помнить кучю параметров.
Поэтому для себя сделал простенький файл, из найденного на просторах инета:
(листинг stringconvert.h)
#ifndef _STRINGCONVERT_H
#define _STRINGCONVERT_H
#include <string>
#include <sstream>
template <typename T>
std::string toString(T val)
{
std::ostringstream oss;
oss<< val;
return oss.str();
}
template <typename T>
T fromString(const std::string& s)
{
std::istringstream iss(s);
T res;
iss >> res;
return res;
}
#endif /* _STRINGCONVERT_H */
А использовать его очень просто:
(листинг main.cpp)
#include <stdlib.h>
#include "stringconvert.h"
#include <string.h>
#include <iostream>
/*
*
*/
using namespace std;
int main(int argc, char** argv)
{
//convert numbers to string
int i = 1234;
float f = 1234.12;
double d = -345.67;
string s_i = toString(i);
string s_f = toString(f);
string s_d = toString(d);
//print numbers converted to strings
cout << "Integer to string: " << s_i << endl;
cout << "Float to string: " << s_f << endl;
cout << "Double to string: " << s_d << endl << endl;
//convert string to numbers
string s_ii = "456";
string s_ff = "456.678";
string s_dd = "-890.45";
int ii = fromString<int>(s_ii);
float ff = fromString<float>(s_ff);
double dd = fromString<double>(s_dd);
//print strings converted to numbers
cout << "String to integer: " << ii << endl;
cout << "String to float: " << ff << endl;
cout << "String to double: " << dd << endl;
return (EXIT_SUCCESS);
}
Вывод программы:
Integer to string: 1234
Float to string: 1234.12
Double to string: -345.67
String to integer: 456
String to float: 456.678
String to double: -890.45
Преобразование происходит при помощи шаблонов
функций(о том, что это такое можно глянуть тут http://programmersclub.ru/29/ )
При преобразовании любого чисельного типа к строке можно не указывать из какого типа происходит преобразование, а вот из строки в число указывать нужно, что и видно в листинге.
А так не пробовали:
ОтветитьУдалитьchar s[10];//для знакового 4-байтного целого
sprintf(s, "%d", n);
?