将用户输入数字转换为整数向量(C ++)

问题描述 投票:1回答:4

我希望我的程序要求用户输入任何数字,然后将其存储到一个向量中,其中每个数字都分配给一个单独的向量索引:

input: 142

output vector: [1, 4, 2]

我试过这个:

int main()
{
     std::vector<int> v;
     int number;
     cin >> number;
     for(unsigned int i = 100; i > 0; i/=10)
     {
         v.push_back(number/i);
         number -= (number/i)*i;
     }

     for(size_t i = 0; i < v.size(); ++i)
     {
         std::cout<<v[i]<<std::endl;
     }
}

有用。但是当输入长度未知时我该怎么办?

c++ parsing number-formatting stdvector
4个回答
3
投票

使用简单的std::string和每个char(实际上是整数)的字符串转换为整数,如下所示:SEE LIVE HERE

#include <iostream>
#include <vector>
#include <string>

int main()
{
    std::vector<int> v;
    std::string number = "123456789987654321";
    for(auto& Integer: number)
      v.emplace_back(static_cast<int>(Integer - '0'));

    for(const auto& it: v) std::cout << it << " ";
}

输出:

1 2 3 4 5 6 7 8 9 9 8 7 6 5 4 3 2 1 

如果输入不需要的字符/用户输入(例如一些负数甚至这个:+-1234567),你可以使用try-catchtry将char转换为int,否则跳过catch块如下。 SEE LIVE HERE

#include <iostream>
#include <vector>
#include <string>
#include <exception>
int main()
{
    std::vector<int> v;
    std::string number = "+-1234567";
    for(auto& Integer: number)
    {
        std::string Char(1, Integer); // convert to string
        try         {   v.emplace_back(std::stoi(Char));        }
        catch(...)  {   continue; }     // any case of exceptions

        /* or using much simpler std::isdigit from <cctype>
           by which conversion to std::string and try-catch can be avoided.

        if(std::isdigit(Integer))
            v.emplace_back(static_cast<int>(Integer - '0'));
        */
    }
    for(const auto& it: v) std::cout << it << " ";
}

输出:

1 2 3 4 5 6 7 

Edte:根据@Aconcagua建议,包括与std::isdigit的解决方案


2
投票
while(number) {
  v.push_back(number%10);
  number /= 10;
}
std::reverse(v.begin(), v.end());

1
投票

改变qazxsw poi初始化qazxsw poi而不是for。重写的unsigned int i = number声明将是:

unsigned int i = 100

1
投票

我想留下数字和for是一个选项,你可以做到以下几点:

for(unsigned int i = number; i > 0; i/=10)

使用模数运算符,您只需取最后一位数字并将其插入std::deque的前面。然后你用int main() { std::deque<int> v; int number; cin >> number; while(number != 0) { v.push_front(number%10); number = number/10; } for(size_t i = 0; i < v.size(); ++i) { std::cout<<v[i]<<std::endl; } return 0; } “切断”那个数字。

我使用了一个双端队,因为deque

© www.soinside.com 2019 - 2024. All rights reserved.