我试图再次跳入代码,并尽我所能教自己C ++的来龙去脉。我有以下代码,我一直在研究中,需要将其适应于我发现数字分解分解的项目。
代码似乎可以正常工作,我可以将其输出到控制台,但是我想将其处理为字符串变量并返回它,但是主要的问题是将其从向量(int,int)转换为std: :string变量。
我尝试添加变量并将其强制转换为字符串,但每次这样做,我似乎都会丢失数据。
struct factor {
long prime;
long power;
};
std::string decomp(int n) {
std::vector<factor> result;
for (long i = 2; i <= n; ++i) {
auto prime = true;
for (auto &f : result) {
for (auto r = i; r % f.prime == 0; r /= f.prime) {
prime = false;
++f.power;
}
}
if (prime) {
result.push_back({ i, 1 });
}
}
for (auto& f : result)
{
std::cout << f.prime;
if (f.power > 1) {
std::cout << "^" << f.power;
}
std::cout << " ";
}
}
我将其格式化为第一个是质数,第二个是质数的幂。我希望它在我的字符串中显示(3,7)为3 ^ 7,并在所有新质数之间插入一个空格,例如3 ^ 7 5 ^ 3等。...
答案 0 :(得分:0)
就像 Bob __ 所说,您可以使用std::stringstream
并将其用作std::cout
的直接替代品。
#include <sstream>
std::string to_string(std::vector<factor> const& decomp)
{
std::stringstream ss;
for (auto const& f : decomp)
{
ss << f.prime;
if (f.power > 1)
ss << '^' << f.power;
ss << ' ';
}
return ss.str();
}
作为旁注:我建议您将分解和字符串转换分为两个单独的函数: