如何在不访问int到string函数的情况下将int转换为string(在c ++中)

时间:2012-10-17 23:51:04

标签: c++

所以我在实习的技能测试中被问到这个问题,当时它让我完全感到困惑。我现在有一些代码,我认为应该可以工作,但是没有为字符串分配正确的值。

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

int main()
{
     // declarations
     int i = 0, num= 63;
     string b="";

     while (num != 0)
     {
          i = num % 10;
          b.insert(0,i + 48 + "");
          num = num/10;
     }


     cout << b << endl;

     return 0;
}

“num”是整数值(我只使用63作为例子)

编辑::我错误地解释了,我不能使用任何为我做字符串转换的函数,而不是我不能使用字符串库,我的错误。

5 个答案:

答案 0 :(得分:6)

将插入行更改为

b.insert(0, 1, '0' + i);

这将insert在字符串中的索引0处将i添加到'0'一次获得的字符。


解释您的代码无效的原因:

b.insert(0,i + 48 + "");

上面一行正在调用

basic_string::insert( size_type index, const CharT* s );

通过将48 + i添加到""字符串文字的地址来确定指针,从而导致垃圾。

答案 1 :(得分:0)

我建议使用递归函数:

std::string f( int val )
{
   if ( val >= 10 )
      return f( val / 10 ) + ( char )( val % 10 + '0' ) ;
   else
      return std::string( 1, '0' + val ) ;
}

用法:

std::cout << f( 63 ) << std::endl ;

请注意,此函数应附加到您的字符串,而不是使用非常昂贵的移位(并放在字符串的前面。)

答案 2 :(得分:0)

值得注意的是,代码还有其他错误。例如,转换不适用于num == 0。这是一个更好的版本:

#include <iostream>
#include <algorithm>
#include <string>
#include <cstdlib>

int main(int ac, char* av[])
{
    int num(ac == 1? 0: std::atoi(av[1]));
    std::string b;

    do
    {
        b.push_back((num % 10) + '0');
        num /= 10;
    }
    while (num != 0);
    std::reverse(b.begin(), b.end());
    std::cout << b << '\n';
    return 0;
}

答案 3 :(得分:0)

非常简单的解决方案:使用字符串流。在这种情况下,输出字符串流:

#include <iostream>
#include <string>
#include <sstream>

std::string IntToString(int value) {
    std::ostringstream ss;
    ss << value;
    return ss.str();
}

const char* IntToCString(int value) {
    std::ostringstream ss;
    ss << value;
    return ss.str().c_str();
}

答案 4 :(得分:0)

这是一些不使用任何库但不执行分配的代码。相反,用户应该提供足够大的缓冲区,并且她会收到一个指向结果字符串开头的指针:

char * format(unsigned int n, char * buf, std::size_t len)
{
    if (len == 0) return NULL;

    char * p = buf + len;

    *--buf = 0;

    while (n && p > buf)
    {
        *--buf = '0' + (n % 10);
        n /= 10;
    }

    return n == 0 ? p : NULL;
}

嵌入式用户可能会喜欢这样,特别是因为该功能不能控制您以外的任何操作。

用法:

char buf[100];
char * s = format(12345, buf, sizeof buf);
if (s) { printf("Formatted: %s\n", s); }