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()
成员函数轻松转换最终结果。
我的代码应该打印 "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()
成员函数轻松转换最终结果。