如何将int转换为字符串(在C 中),而无需访问INT到字符串函数
How to convert int to string (in c++) without access to int to string function
所以我在实习的技能测试中被问到了这一点,当时它使我感到困惑。我现在有一些代码,我认为应该有效,但没有为字符串分配正确的值。
#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); }
相关文章:
- 为什么没有访问所有字符串字符?
- 使用 ReadProcessMemory 获取字符串值的访问冲突
- 循环访问还包含未使用元素的字符串数组
- 循环访问资源字符串表
- 在qt创建器中调试时如何访问字符串变量的完整值?
- 当我用"ñ"字符循环访问字符串时出现奇怪的结果
- 如何在读取文件时访问以前的字符串?
- C++字符串问题-如何访问字符串元素
- 访问包含P的有效索引时返回空格的C++字符串
- 交换两个字符串时访问正确的内存时,我遇到了分段错误
- C++/CLI访问字符串::来自非CLI代码的格式
- 需要从字符串数组的一部分访问元素
- 是否可以从字符串访问变量?
- 循环访问 c++ 中的字符串
- 循环访问字符串片段
- 如何修复访问动态数组中结构中的字符串变量时"segmentation fault (core dumped)"错误
- 如何在 Qt/C++ 中仅将文件路径作为字符串访问文件
- C 使用字符串访问变量
- 基于字符串访问类成员
- 动态 C 字符串访问