C++ 标准库中,有没有从 int 转换到 string 的函数 ? (是string, 不是 char *)

zqrjx 2003-04-22 04:50:27
如题~~~
...全文
135 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
vagabond 2003-07-07
  • 打赏
  • 举报
回复
//最近正在看postgresql的C++接口库,顺手摘抄一个给大伙看看

#include <string>
#include <iostream>
using namespace std;

namespace{
/// C-style format strings for various built-in types. Only allowed for
//// certain types, for which this function is explicitly specialized below.
template<typename T> inline const char *FmtString(T);

// Not implemented to prevent accidents with irregular meaning of argument:
// template<> inline const char *FmtString(const char *&) { return "%s"; }

template<> inline const char *FmtString(int) { return "%i"; }

// Convert object of built-in type to string
template<typename T> inline std::string ToString(const T &Obj)
{
// TODO: Find a decent way to determine max string length at compile time!
char Buf[500];
sprintf(Buf, FmtString(Obj), Obj);
return std::string(Buf);
}
}
int main(int argc,char *argv[])
{
int i= 1234;
string str = ToString(i);
cout<<str<<endl;
}
hookuy 2003-07-07
  • 打赏
  • 举报
回复
暂住
vyc 2003-07-07
  • 打赏
  • 举报
回复
to:TopCat
呵呵,败给你了.
TopCat 2003-07-01
  • 打赏
  • 举报
回复
关于性能方面,并没有什么大的损失(绝不会出现“要比stringstream快3倍以上”的情况),
---------------------------
真的吗?来试试下面这段程序:

#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream>
#include <sstream>
#include <windows.h>

int main()
{
time_t start_time = GetTickCount();
for(unsigned int i = 0; i < 65535; ++i)
{
char str[100];
std::string s;
snprintf(str, 100, "%d", i);
s = str;
}
time_t end_time = GetTickCount();
std::cout << "Time1: " << end_time - start_time << std::endl;

start_time = GetTickCount();
for(unsigned int i = 0; i < 65535; ++i)
{
std::string s;
std::ostringstream oss;
oss << i;
s = oss.str();
}
end_time = GetTickCount();
std::cout << "Time2: " << end_time - start_time << std::endl;
}

我的机器上测试的结果(C++ Builder 6.0 + STLPort):

Time1: 78
Time2: 281
vyc 2003-06-30
  • 打赏
  • 举报
回复
俺觉得楼主的意思是想知道在“标准库”中,有没有将int直接转化为string(不是通过char*)的方法。俺觉得俺的方法是最简单直观的。
关于性能方面,并没有什么大的损失(绝不会出现“要比stringstream快3倍以上”的情况),不过引入了sstream,程序的体积倒是增加了不少。
Inkick 2003-06-30
  • 打赏
  • 举报
回复
学习~~~~~`

我以前没听说过ostringstream,惭愧!!!
gzlucky 2003-06-29
  • 打赏
  • 举报
回复
String strTest;

...

strTest.Format( "%d", 100 );
TopCat 2003-06-28
  • 打赏
  • 举报
回复
没错,用stringstream的好处在于可以泛型化。如果明确是整数,的确这样要快很多:
string inttostr(int i)
{
char temp[12];
snprintf(temp, 12, "%d", i); //如果是VC,要用_snprintf函数
return temp;
}

刚才我测试了一下,基本上要比stringstream快3倍以上。
马老哈 2003-06-28
  • 打赏
  • 举报
回复
楼上的兄弟啊,你们的程序都是什么性能啊,拉一个流类进来,就为了把一个整数转换成 string? 一个stream,要多少代码?多少而外的数据?由此造成多大的性能开销?
这点小事,为什么不干脆用 strtol 转掉,再赋给 string 算了?faint
vyc 2003-06-27
  • 打赏
  • 举报
回复
up
vyc 2003-06-27
  • 打赏
  • 举报
回复
干嘛写那么复杂啊,不就是用流的自动格式化能力吗?

#include <conio.h>
#include <sstream>
#include <iostream>
using namespace std;
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
int n(8);
ostringstream oss;
oss<< n;

string str(oss.str());
cout<< str; // 屏幕显示8

getch();
return 0;
}
sufeng 2003-06-26
  • 打赏
  • 举报
回复
boost::lexical_cast<string>(12345)
fixopen 2003-06-26
  • 打赏
  • 举报
回复
to molti(拼命找借口) :

boost里就有lexical_cast<>,跟你描述的技术是一样的。
jinzdi 2003-05-10
  • 打赏
  • 举报
回复
string构造函数就可以的
Wendydd 2003-05-09
  • 打赏
  • 举报
回复
molti的程序好啊
不知道还有这样的用法,开眼界!
maojincxj 2003-04-23
  • 打赏
  • 举报
回复
stl中有相应的函数,
我忘了,前几天刚看到的,
你自己查查看
产品老唐 2003-04-23
  • 打赏
  • 举报
回复
#include <sstream>
#include <iostream>

template <class T>
std::string to_string(T t, std::ios_base & (*f)(std::ios_base&))
{
std::ostringstream oss;
oss << f << t;
return oss.str();
}

int main()
{
// to_string()的第二个参数应为如下中的一个
// std::hex, std::dec 或 std::oct
std::cout<<to_string<long>(123456, std::hex)<<std::endl;
std::cout<<to_string<long>(123456, std::oct)<<std::endl;
return 0;
}

//转自某人的技术文章,希望对你有所帮助
fangrk 2003-04-22
  • 打赏
  • 举报
回复
#include <sstream>
#include <string>
#include <iostream>
using namespace std;

template<class T1,class T2>
inline void ChangeFmt(const T1& From,T2& To)
{
stringstream ss;
ss<<From;
ss>>To;
}
int main(int argc, char *argv[])
{
int a=1234;
string str("0000");
ChangeFmt(a,str);
cout<<str<<endl;
}


24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧