首页 > 解决方案 > 有没有一种简单的方法可以将向量 int 集转换为字符串输出?

问题描述

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

标签: c++

解决方案


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

附带说明:我建议您将分解和字符串转换拆分为两个单独的函数:


推荐阅读