一种更简单的方法是将数字“打印”到 a 中std::string(例如使用std::ostringstreamor std::to_string())并将字符一个接一个地复制到您的std::vector.
#include <iostream>
#include <sstream>
#include <vector>
std::vector<int> split(int number)
{
std::vector<int> vec;
if (number < 0) return vec;
std::string text = std::to_string(number);
for (char c : text) vec.push_back(c - '0');
return vec;
}
std::ostream& operator<<(std::ostream &out, const std::vector<int> &vec)
{
for (int i : vec) out << ' ' << i;
return out;
}
int main()
{
std::cout << "split(1000):" << split(1000) << '\n';
}
输出:
split(1000): 1 0 0 0
coliru 现场演示
另一种方法是使用operator %(模数,余数)。随着% 10你得到最后一个数字。因此,您可以将数字从右到左分开。在向量的开头插入数字或(更好)将它们推回并std::reverse最终结果。
样本:
#include <algorithm>
#include <iostream>
#include <vector>
std::vector<int> split(int number)
{
std::vector<int> vec;
if (number >= 0) {
do {
vec.push_back(number % 10);
number /= 10;
} while (number);
std::reverse(vec.begin(), vec.end());
}
return vec;
}
std::ostream& operator<<(std::ostream &out, const std::vector<int> &vec)
{
for (int i : vec) out << ' ' << i;
return out;
}
int main()
{
std::cout << "split(1000):" << split(1000) << '\n';
}
输出:
split(1000): 1 0 0 0
coliru 现场演示