【问题标题】:How to fix garbage values that are being pushed back into a vector<int>, when I push a string containing integers [duplicate]当我推送包含整数的字符串时,如何修复被推回向量<int>的垃圾值[重复]
【发布时间】:2019-09-20 02:25:31
【问题描述】:

编辑:- 他的问题与Getting a character from a string is returning an unexpected number? 有何不同

  1. 此处指定的技术是 C#,而不是 c++。
  2. 问题关联列表框,而我的问题关联向量和字符串。

我试图在我的 c++ 整数向量(向量)中借助字符串迭代器推送一个充满整数的字符串,但不幸的是,当我推送取消引用的字符串时,我得到的只是一些垃圾值被推送到我的向量。

我尝试搜索谷歌好几天。除此之外,我尝试查看文档,还尝试使用 (int) 强制转换 de 引用的字符串迭代器。

#include <iostream>
#include <vector>
#include <string>
using namespace std;




int main() {
    string str = "1234";
    vector<int> vec;

    for (string::iterator itr = str.begin(); itr != str.end(); ++itr){         
        vec.push_back(*itr);

    }
    for (vector<int>::iterator itr = vec.begin(); itr != vec.end();      
    ++itr) {
         cout << *itr;
    }

    return 0;
}

预期输出:1234


实际输出:49505152

【问题讨论】:

  • '1'1 不同。例如,在 ASCII 中,'1' == 49。编辑:请注意您的输出是连续的 2 位数字。 49、50、51 和 52。
  • 嗯,这解释了很多。有没有办法强制解决这个问题,即保留整数而不将其转换为 ASCII 值?
  • Brian 发布了一个答案,包括如何做到这一点。
  • 接近投票者:这不是真正的骗子,这是 C++ 而骗子是 C#
  • 是的,请看一下,感谢@Jabberwocky 的帮助。

标签: c++ stl


【解决方案1】:

您看到的不是“垃圾值”,而是字符串中字符的数值。也就是说,因为你和绝大多数人一样使用的是 ASCII 系统,所以字符 '1' 的值是 49,以此类推。如果要将数字字符(例如 '1')转换为 整数,例如 1,则需要减去 '0'(在您的系统上为 48)。

【讨论】:

  • 您好,感谢您的回答!有没有其他选择,不会每次在我的代码中减去零让我的代码看起来很丑?
  • @NeelMishra 你实际上想要达到什么目的?如果您有一个字符串"1234",并且您想将其转换为包含int 值1、2、3 和4 的vector&lt;int&gt;,那么您需要减去'0'
  • @NeelMishra 我不知道你所说的“丑陋”是什么意思,但通常情况下,你的代码不应该被这种转换乱七八糟,因为你应该只在“输入”被转换的地方执行它转化为内部表示。
  • @NeelMishra 这回答了如何实际实现您想要的行为。人们普遍认为,对于一般情况,这是最好的方法。如果你觉得它很难看,可以随意将它隐藏在一个函数中。然后你可以这样做,例如vec.push_back(char_to_int(*itr));。但是x - '0' 是 C++ 中一个众所周知的习语。经验丰富的开发人员会立即认出该模式的本质。
猜你喜欢
  • 2020-01-08
  • 1970-01-01
  • 2021-03-17
  • 2022-11-10
  • 2016-07-12
  • 1970-01-01
  • 2016-08-23
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多