C++ // 尝试重写工作代码以包含我的函数

C++ // Trying to rewrite a working code to include my function

我的代码应该打印 "a" 数量的数字(1 < a < n < 100000),这些数字同时可以被 "x" 整除并且不能被 "y" 整除 - 所有这些对于 "t" 个数据集。

我编写了一个仅使用 main() 函数的代码,但是 - 在我学习函数的过程中 - 我正在尝试重写此代码以包含我自己的函数。例如,如果我输入 t=1、n=35、x=5 和 y = 14,则输出应为:“5 10 15 20 25 30”。

代码 1 是工作正常的代码,仅适用于主要功能。代码 2 是我目前正在处理的代码,应该包含我的函数 "check"

我已经设法将代码 2 重写为 returns 对应于我应该获得的数字的 ASCII 符号,但是我在将这些符号转换为数字时遇到了问题我的要求。 输入“1 7 2 4”作为输入数据时,代码returns两个符号而不是“2 6”。

如果能帮助解决此问题,我们将不胜感激...

代码 1:

#include <iostream>

using namespace std;

int main()
{
    int t, n, x, y;
    cin >> t;

    for (int i=0; i<t; i++)
    {
        cin >> n >> x >> y;

        for (int a=0; a<n; a++)
        {
            if ((a%x==0)&&(a%y>0))
                cout << a << " ";
        }
        cout << endl;
    }
    return 0;
}

代码 2:

#include <iostream>

using namespace std;

string check (int n, int x, int y)
{
    string result;
    for (int a=0; a<n; a++)
    {
        if ((a%x==0)&&(a%y>0))
        {
            result += a;
            result += " ";
        }
    }
    return result;
}

int main()
{
    int t, n, x, y;
    cin >> t;

    for (int i=0; i<t; i++)
    {
        cin >> n >> x >> y;
        cout << check (n, x, y) << endl;
    }
    return 0;
}

有什么问题吗?

这是因为下面的语句被编译器理解为好像你想在字符串中添加单个char(所以char对应的是a的ascii码,如果字符串编码是ascii):

result += a; 

您可以通过尝试测试 operator+= 的这种行为:

result += 64;   // ascii code for @

如何解决?

要获得您期望的结果,您需要将 a 显式转换为字符串。所以将行更改为:

result += to_string(a);

有没有更简单的方法?

或者,如果您有很多格式,并且对流感到满意,则可能需要考虑 stringstream

string check (int n, int x, int y)
{
    stringstream result;
    for (int a=0; a<n; a++)
    {
        if ((a%x==0)&&(a%y>0))
        {
            result << a << " ";
        }
    }
    return result.str();
}

字符串流的行为与普通流相同(例如 cout),只是它们将结果写入内存。然后,您可以使用 str() 成员函数轻松转换最终结果。