C++ 将整数转换为字符串C++;

C++ 将整数转换为字符串C++;,c++,itoa,C++,Itoa,我试图将一个整数转换为字符数组,我遇到了这段代码 int i = 5; std::string s; std::stringstream out; out << i; s = out.str(); inti=5; std::字符串s; std::stringout; 是的,它应该这样做。如果对结果执行其他字符串类型操作(例如,将其与其他字符串连接,搜索字符串中的字符),您(主要)会注意到直接打印数字的区别 举个例子: std::cout << i+i; // sho

我试图将一个整数转换为字符数组,我遇到了这段代码

int i = 5;
std::string s;
std::stringstream out;
out << i;
s = out.str();
inti=5;
std::字符串s;
std::stringout;

是的,它应该这样做。如果对结果执行其他字符串类型操作(例如,将其与其他字符串连接,搜索字符串中的字符),您(主要)会注意到直接打印数字的区别

举个例子:

std::cout << i+i;   // should print "10"
std::cout << s+s;   // should print "55"

是的,它应该这样做。如果对结果执行其他字符串类型操作(例如,将其与其他字符串连接,搜索字符串中的字符),您(主要)会注意到直接打印数字的区别

举个例子:

std::cout << i+i;   // should print "10"
std::cout << s+s;   // should print "55"
std::cout
此外,我更希望我能将相同的int转换成char数组

此外,我更希望我能将相同的int转换成char数组


如果你想停止担心你可能感兴趣的问题

#包括
#包括
#包括
int main(){
常数i=5;
const char*s=boost::lexical_cast(i).c_str();

如果你不想再担心你可能感兴趣的问题,那就不要担心

#包括
#包括
#包括
int main(){
常数i=5;
const char*s=boost::lexical_cast(i).c_str();

std::cout您希望它打印什么?数字5的文本表示为“5”.我只是想看看文本表示法是什么。这是否意味着如果我尝试将任何大数字转换为文本,它们仍然是相同的数字?例如,如果我是-635997,那会是什么样子?因为现在它给了我相同的数字。它还能是什么?如果不是,那么-635997的文本表示法是什么“-635997”?给定的数字有许多可能的文本表示形式;默认情况下,您得到的是最简单和最熟悉的(十进制,无前导0)。您可以设置一些标志来获得其他表示形式。您希望打印什么?数字5的文本表示形式是“5”“。我只是想看看文本表示法是什么。这是否意味着如果我尝试将任何大的数字转换为文本,它们仍然是相同的数字?例如,如果我是-635997,那会是什么样子?因为现在它给了我相同的数字。它还能是什么?如果不是,那么-635997的文本表示法是什么“-635997”?给定的数字有许多可能的文本表示形式;默认情况下,您会得到最简单和最熟悉的表示形式(十进制,无前导0)。您可以设置一些标志来获得其他表示形式。只是想知道参数不应该是strlen()是字符指针吗?还是字符串会以同样的方式工作?@Max Eastman:不,你是对的——将
std::string
传递给
strlen
是非法的。它应该是
new char[s.length()+1];
new char[strlen(s.c_str())+1]
,但第二个当然天生效率较低。@ildjarn-你是对的。我想我该休息了:)@Mahesh:
std::auto_ptr
使用
delete
而不是
delete[]
,因此
std::auto\u ptr
将导致此处出现未定义的行为。在C++0x编译器上,首选
std::unique\u ptr
;在较旧的编译器上,
boost::scoped\u array
boost::shared\u array
是最好的选择。@Mahesh:说到这里,您的代码应该有
delete[]charPtr;
而不是
delete charPtr;
;-]只是想知道strlen()的参数不应该是字符指针吗?或者字符串的行为应该是相同的吗?@Max Eastman:不,你是对的——将
std::string
传递给
strlen
是非法的。它应该是
new char[s.length()+1];
或者
new char[strlen(s.c_str())+1];
,但第二个当然效率较低。@ildjarn-你是对的。我想我该休息了:)@Mahesh:
std::auto_ptr
使用
删除
而不是
删除[]
,因此
std::auto\u ptr
将导致此处出现未定义的行为。在C++0x编译器上,首选
std::unique\u ptr
;在较旧的编译器上,
boost::scoped\u array
boost::shared\u array
是最好的选择。@Mahesh:说到这里,您的代码应该有
delete[]charPtr;
而不是
删除charPtr;
;-]
#include <boost/lexical_cast.hpp>
#include <string>
#include <iostream>

int main() {
  const int i=5;
  const char* s = boost::lexical_cast<std::string>(i).c_str();
  std::cout << s << std::endl;
}