我正在尝试使用以下代码将整数放入字符串:
int x = 42;
string num;
bool negative = false;
if(x < 0)
{
negative = true;
x = x * -1;
}
while(x > 0)
{
num.push_back(x % 10);
x = x / 10;
}
但是当我尝试输出字符串时,它会出现有线字符。你能帮忙解决一下这段代码中发生的事情吗?
编辑: PS。我想以亲切的手动方式做到这一点。意味着我不想使用to_string
答案 0 :(得分:5)
会有奇怪的字符,因为当你push_back()
时,整数被转换(或者说解释)为相应的ASCII字符,然后被推送回到字符串中。
前进的方法是通过在整数值中添加'0'
将整数转换为字符。
while(x > 0)
{
num.push_back((x % 10) + '0'); //Adding '0' converts the number into
//its corresponding ASCII value.
x = x / 10;
}
'0'
添加到整数的原因是什么? 0的ASCII值是48,1是49,2是50等等...因此,我们在这里基本上做的是将48(ASCII值为0)添加到相应的整数以使其相等到它的ASCII等价物。顺便说一下,'0'
等于48,因为 是0
字符的ASCII值。
答案 1 :(得分:2)
将std::to_string
与string::append
:
while (x > 0)
{
num.append(std::to_string(x % 10));
x = x / 10;
}
使用push_back
强迫您做更多工作。
答案 2 :(得分:1)
要转换您可以使用的整数:
'0'
移动/添加ASCII表示,从而将int
值转换为char
值。new_type(old_type)
,还有一些额外的types of casting。要扩展您可以使用的字符串的长度:
push_back(value)
,append(append)
。str += value
; 可能的实施方式是:
while(x > 0)
{
num+=((x % 10) + '0');
x = x / 10;
}