使用 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_stringstring::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 将整数放入字符串的主要内容,如果未能解决你的问题,请参考以下文章

将整数放入字符串

我们如何将整数变量放入任务字符串中?

为啥我无法将对象 push_back 放入 C++ 多维向量中

C ++字符串push_back函数不起作用

如何一次将多个整数传递给一个向量?

字符串向量 push_back 在类中失败