如何将int转换为字符串(在C 中),而无需访问INT到字符串函数

How to convert int to string (in c++) without access to int to string function

本文关键字:字符串 访问 函数 INT int 转换      更新时间:2023-10-16

所以我在实习的技能测试中被问到了这一点,当时它使我感到困惑。我现在有一些代码,我认为应该有效,但没有为字符串分配正确的值。

#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为例)

edit ::我错误地解释了,我无法使用任何对我的int串起转换的函数,而不是我无法使用字符串库,我的错误。

将插入线更改为

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

这将插入从字符串中的索引0中添加i'0'获得的字符。


说明为什么您的代码不起作用:

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

上面的线正在调用

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

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

我建议递归功能:

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 ;

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

值得注意的是,代码还有其他错误。例如,转换对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;
}

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

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

这是一些不使用任何库且不执行分配的代码。相反,预计用户将提供足够大的缓冲区,并且她收到了一个指针,以返回结果字符串的开始:

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: %sn", s); }