使用 push_back 将整数放入字符串
Posted
技术标签:
【中文标题】使用 push_back 将整数放入字符串【英文标题】:Put integer in to string using push_back 【发布时间】:2015-04-17 04:41:20 【问题描述】:我正在尝试使用以下代码将整数放入字符串:
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;
但是当我尝试输出字符串时,它会出现有线字符。你能帮忙看看这段代码发生了什么吗?
编辑: 附言。我想以手动方式执行此操作。表示我不想使用 to_string
【问题讨论】:
注意:你的代码不会为x == 0
做任何事情。
【参考方案1】:
会有奇怪的个字符,因为当你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(0 的 ASCII 值),使其相等到它的 ASCII 等价物。顺便提一下,'0'
等于 48,因为它是0
字符的 ASCII 值。
【讨论】:
您好,谢谢!这是有效的!你能解释一下'0'的用法吗?或任何参考?再次感谢~! 我宁愿说整数是 not 转换的,但它只是以不同的方式解释。为了进行正确的转换,我会使用"0123456789"[x % 10]
。使用'0'
作为基础是有效的,因为它后面是几乎每个字符集中的其他数字。
@UlrichEckhardt 确实如此。我只是为 OP 提供了完成此任务的最简单方法,而无需更改他的大部分代码。
@user4799188 编辑了答案。
这不会颠倒数字吗?例如13 ---> 3 和 1 所以 31.【参考方案2】:
将std::to_string
与string::append
一起使用:
while (x > 0)
num.append(std::to_string(x % 10));
x = x / 10;
使用push_back
会迫使你做更多的工作。
【讨论】:
是的,这个循环与to_string()
的作用不同。首先,它会跳过零,其次它会产生一个反转的数字字符串。【参考方案3】:
要转换整数,您可以使用:
-
字符操作:将ASCII 表示移动/添加
'0'
,从而将int
值转换为char
值。
类型转换new_type(old_type)
,还有一些额外的types of casting。
要扩展字符串的长度,您可以使用:
-
字符串member functions 喜欢:
push_back(value)
、append(append)
。
Concatenation operator 喜欢:str += value
;
一个可能的实现是:
while(x > 0)
num+=((x % 10) + '0');
x = x / 10;
【讨论】:
以上是关于使用 push_back 将整数放入字符串的主要内容,如果未能解决你的问题,请参考以下文章