【问题标题】:converting integer to string C++将整数转换为字符串 C++
【发布时间】:2011-04-05 17:04:43
【问题描述】:

我正在尝试将整数转换为 char 数组,但遇到了这段代码

int i = 5;
std::string s;
std::stringstream out;
out << i;
s = out.str();

但是当我尝试打印 s 的值时,它仍然打印 5。我不知道它是否应该这样做,还是我做错了什么?此外,如果我可以将相同的 int 转换为 char 数组,我会更喜欢。但我将不胜感激在这件事上的任何帮助。 谢谢! 代码取自:Alternative to itoa() for converting integer to string C++?

【问题讨论】:

  • 你想打印什么?数字 5 的文本表示是“5”。
  • 我只是想看看文本表示会是什么。这是否意味着如果我尝试将任何大数字转换为文本,它们仍然是相同的数字?例如,如果我有 -635997,那会是什么样子?因为现在它给了我相同的数字
  • 还能是什么?如果不是“-635997”,-635997 的文本表示是什么?一个给定的数字有许多可能的文本表示;默认情况下,您会得到最简单和最熟悉的(十进制,没有前导 0)。您可以设置一些标志来获取其他表示形式。

标签: c++ itoa


【解决方案1】:

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

举例:

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

【讨论】:

    【解决方案2】:

    此外,如果我可以将相同的 int 转换为 char 数组,我会更喜欢。

    char *charPtr = new char[ s.length() + 1 ] ; // s is the string in the snippet posted
    strcpy( charPtr, s.c_str() ) ;
    
    // .......
    
    delete[] charPtr ; // Should do this, else memory leak.
    

    【讨论】:

    • 只是想知道 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_ptr&lt;char&gt; 会在这里导致未定义的行为。在 C++0x 编译器上,std::unique_ptr&lt;char[]&gt; 是首选;在较旧的编译器上,boost::scoped_array 或 boost::shared_array 是最佳选择。
    • @Mahesh : 说到这,你的代码应该有delete [] charPtr; 而不是delete charPtr; ;-]
    【解决方案3】:

    如果您不想再担心此类问题,您可能会对boost/lexical_cast.hpp 感兴趣。

    #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;
    }
    

    【讨论】:

      猜你喜欢
      • 2014-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-08
      • 1970-01-01
      • 2011-04-21
      • 2011-12-27
      • 2021-08-15
      相关资源
      最近更新 更多