c++ - 如何将数字转换为整数 vector ?

标签 c++ algorithm parsing number-formatting stdvector

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

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;
     }
}

它有效。但是输入长度未知怎么办?

最佳答案

简单地使用 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-catch . try 将 char 转换为 int,否则跳过 catch block ,如下所示。 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

关于c++ - 如何将数字转换为整数 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50871884/

相关文章:

c++ - LZO的问题

c# - 回溯搜索算法

N皇后的算法

c - 输出显示不同

c - 解析 txt 文件并写入 2 个单独的文件

c++ - Poco C++ 事件是如何处理的?

c++ - 仅在单击 "open"时关闭 QFileDialog

c++ - 使用VS2010作为IDE,使用MSVC 2005作为编译器

ruby-on-rails - Rails 中的 Spreadsheet.open 给出此错误 "unknown encoding name - MACINTOSH"

jquery - 解析多级JSON