有没有一种简单的方法可以将矢量 int 集转换为字符串输出?

Is there an easy way to convert a vector int set to a string output?

本文关键字:int 转换 输出 字符串 一种 简单 方法 有没有      更新时间:2023-10-16

我试图再次跳入代码,并尽我所能自学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 等......

就像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();
}

作为旁注:我建议您将分解和字符串转换拆分为两个单独的函数: