c语言long double转换成字符串,如何在C ++中将long转换为字符串?

在C++中,如何将EDCOX1的0度转换为EDCOX1×1?

只是有点吹毛求疵…我不会称之为"演员阵容"。

@你能告诉我为什么吗?我是一个自我中心的人,C++仍然让我感到不舒服。:)

同意,这是一个转换,而不是演员表。

啊…明白了。我的错误。

我发现"铸造"这个词通常是超载的。人们在想说"转换"的地方使用它。像"隐式强制转换"这样的东西并不存在:强制转换总是显式的。对我来说,这是一种程序员的无知。

在标准lib cs.usyd.edu.au/~kev/pp/resources/cplusplus/ref/cstdlib/&hellip中使用ltoa;

不知怎么的,LTOA不适合我。当试图在C++中完成某件事情时,感觉很愚蠢。对我来说,它甚至比JavaScript更糟糕。:)

@还有一件事——英语不是我的母语。我经常混淆相似词的确切意思。

顺便说一句,我现在很喜欢javascript。很奇怪事情是怎么变的:)

STD:在C++ 11中,实际上存在STD::toString和STD::TooWWString函数。

string to_string(int val);

string to_string(long val);

string to_string(long long val);

string to_string(unsigned val);

string to_string(unsigned long val);

string to_string(unsigned long long val);

string to_string(float val);

string to_string(double val);

string to_string (long double val);

您可以使用Stringstream。

#include

// ...

std::string number;

std::stringstream strstream;

strstream << 1L;

strstream >> number;

在标准库中,编译器通常也有一些专用的C函数。不过,我更喜欢更"便携"的变体。

C的方法是使用sprintf,但这并不十分安全。在一些库中有新的版本,比如sprintf_,它可以防止缓冲区溢出。

如果你喜欢复制粘贴,这里是:

#include

template

inline std::string to_string (const T& t)

{

std::stringstream ss;

ss << t;

return ss.str();

}

你错过了template。

谢谢,我已经更新了答案。

inline现在是多余的。

好吧,可以讨论一下,这取决于编译器的实现,模板只有在编译器认为合适的时候才进行内联扩展。

内联函数也是如此。令人惊讶的是,inline关键字与代码内联几乎没有关系(至少从1998年开始),它只是标记一个函数,这样链接器就不会抱怨多个定义了。

boost::lexical_cast(my_long)更多信息请访问http://www.boost.org/doc/libs/1_39_0/libs/conversion/lexical_cast.htm

+1,尽管最初,Lexical_cast只不过是接受的Stringstream示例(只是更具表现力地进行了包装)。

int main()

{

long mylong = 123456789;

string mystring;

stringstream mystream;

mystream << mylong;

mystring = mystream.str();

cout << mystring <

";

return 0;

}

我不知道这是什么类型的作业,但最可能的情况是,老师不想要一个你称之为"神奇的"现有功能的答案(尽管这是推荐的方法),但他想看看你是否可以自己实现。

以前,我的老师常说"我想看看你是否能自己编程,而不是你是否能在系统中找到它。"嗯,他错得有多严重;)。

不管怎样,如果你的老师是一样的,这是很难做到的。

std::string LongToString(long value)

{

std::string output;

std::string sign;

if(value < 0)

{

sign +"-";

value = -value;

}

while(output.empty() || (value > 0))

{

output.push_front(value % 10 + '0')

value /= 10;

}

return sign + output;

}

你可以说使用std::string不是"困难的方式",但我猜在实际的集会中什么是重要的。

这次可以使用就绪函数。但谢谢你这个好主意。

真的?他只是在检查你是否能在某个地方找到一个函数?是的,时代变了;)…

@更棒的是-他注意到我知道OOP,感觉很好,没有检查任何其他东西。:)

查找要使用的函数几乎不知道OOP。

@这里有一些半随机链接,以防你想更清楚地了解我所知道的-pastebin.com/k4yaquxy

它不会比其他使用std::stringstream的解决方案更快吗?

有几种方法。阅读庄园的字符串格式化程序进行深入比较。

这篇文章不错。

对。这至少是我第三次把它联系起来。8V)

在C++ 11中可以使用STD:toSype字符串

long val = 12345;

std::string my_val = std::to_string(val);

#include

....

std::stringstream ss;

ss << a_long_int;  // or any other type

std::string result=ss.str();   // use .str() to get a string back

它是STD::字符串,而不是STD::字符串。

谢谢你-手指有问题。

到目前为止,任何人都没有涉及到的一个问题是,为了帮助您进一步思考这个问题,当它被强制转换为字符串时,需要多长时间的格式。

只需看看spreedsheet程序(如calc/excel)。你想让它四舍五入到最接近的百万,如果它是负数,用括号括起来,总是显示符号……这个数字真的是其他东西的表示吗?你应该用oractal还是hex来表示?

到目前为止,答案已经给出了一些默认输出,但可能不是正确的输出。

如果我需要,我会编辑我的问题。:)

我喜欢这个问题,我给了一个考虑的答案,帮助我们思考家庭作业,而不是给出已经存在的答案,我得到了一个下注,同时,"STD::StrueSt流"有一个投票。

查看std::stringstream。

我通常是用sprintf来完成的。因此,在很长一段时间内,假设您使用的是32位体系结构,则可以执行以下操作:

char buf[5] = {0}; // one extra byte for null

sprintf(buf,"%l", var_for_long);

- 1。虽然C++编译器将编译您的代码,但它肯定不能被称为C++。另外,我怀疑5个字符足够了。

请不要在这个时代提倡sprintf。我们没有足够的缓冲区溢出漏洞吗?并不是说这段代码似乎有任何书面的内容——但你永远不知道事情是如何变化的。

菲尔,超过10000的任何数字都会溢出缓冲区。

阿瓦卡-你说得对。-那会教我在从酒吧回家的路上发到那里。

我同意printf家族存在一些危险,但我不认为我们可以逃离他们。在一个完美的世界里,我们可以忽略它们,但是我工作在C++代码库中,使用它们,知道它们是如何危险的是很好的。每当你接近低级系统编程时,你都会遇到这些调用。诚然,我的例子不是最好的,但现在它被记录了为什么它是坏的,其他人可以从中学习。在内部,我们使用asprintf和vasprintf来防止缓冲区溢出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值