【问题标题】:How to put digits of an integer in a vector in C++如何在 C++ 中将整数的数字放入向量中
【发布时间】:2014-05-14 04:00:28
【问题描述】:

如果用户输入一个整数,例如 4210,我如何在 C++ 中将该整数的每个数字放入一个向量中?

【问题讨论】:

  • 你的意思是 std::vector iv{4,2,1,0}??
  • 是的,但我希望最终用户而不是程序员输入这些数字。
  • 是的,我知道 push_back,但是如何循环整数以获取其中的每个数字?可以吗?
  • 最简单的方法是将其作为字符串输入,然后迭代该字符串,将每个元素推入向量中。在您分别拥有每个数字之后,将其词法转换为 vector. 的整数是微不足道的

标签: c++ vector integer digits


【解决方案1】:

我找到的最简单的方法是这样的:

std::vector<int> res;

int c;
std::cin >> c;

while(c>0)

    {
    res.insert(res.begin(),c%10);
    c/=10;
    }

【讨论】:

    【解决方案2】:

    我不明白为什么人们会建议这样的解决方案,例如来回转换为int,而你想要的只是一个个数字……对于用户以十进制表示的数字。

    "4321" 转换为std::vector&lt;int&gt;{4, 3, 2, 1} 最简单的方法是:

    std::string input;
    std::cin >> input;
    
    std::vector<int> vec;
    
    for (char const c: input) {
        assert(c >= '0' and c <= '9' and "Non-digit character!");
        vec.push_back(c - '0');
    }
    

    【讨论】:

      【解决方案3】:

      或者,如果您更喜欢使用std::string,您可以使用:

      std::vector<int> intVector;
      
      int x;
      std::cin >> x;
      
      for (const auto digit : std::to_string(x)) {
          intVector.push_back(digit - '0');
      }
      

      这假设您的编译器可以使用 C++11。

      Live example

      【讨论】:

      • 我的编译器是 Ubuntu Linux 上的 gcc,它已更新到 4.8.1 版本。我通常用'g++ -Wall -o'编译我的简单程序。如果不是这样,如何在 C++ 上编译?
      • @MohamedAhmed g++ -std=c++11 -Wall -o,应该可以正常工作。
      • 这些数字代表线性反馈移位寄存器中抽头方程中的幂,我将使用这些数字作为要在位集中异或的位的地址。所以,如果我想这样做,我认为转换为字符串是不正确的,我只想要它们原样的整数。谢谢。
      【解决方案4】:

      可以这样做:

      std::vector<int> numbers;
      int x;
      std::cin >> x;
      while(x>0)
      {
         numbers.push_back(x%10);
         x/=10;
      }
      
      std::reverse(numbers.begin(), numbers.end());
      

      【讨论】:

      • 好吧,我会试试的。没关系 - 对于我的应用程序 - 如果添加顺序相反。
      • 把它改成一个栈,或者把向量当成一个栈来对待……“逆序”是相对于你以后怎么读的。
      • 使用 'numbers.emplace(numbers.begin(), x%10);'而不是 'push_back()' 以避免反转向量的开销。
      • 使用emplace(begin())并没有提高性能,反而让性能更差,因为每一个emplace开头的都需要移动之前添加的所有元素,使得整个循环复杂度O(n^2 ),而std::reverse 的复杂度为 O(1)。
      猜你喜欢
      • 2017-08-10
      • 1970-01-01
      • 2019-03-11
      • 2020-12-13
      • 1970-01-01
      • 2011-10-31
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      相关资源
      最近更新 更多