所以我有这段代码,我不知道如何通过将元素数放入循环条件中来循环遍历由chars组成的数组的大小,而不必手动输入“ i < 4”,而是使用数组本身并检查其大小。
我尝试使用std:array并将其通过for-range循环传递,但这并没有给我带来太大的成功。
#include <iostream>
using namespace std;
int main()
{
int r = 0;
while (r == 0)
{
char op;
float num1, num2;
char operators[] = { '+', '-', '*', '/' };
bool check1 = false;
cin >> num1;
cin >> op;
for (int i = 0; i < 4; i++)
{
if (op == operators[i]) {
check1 = true;
break;
}
}...
对不起,希望继续学习正确的代码
答案 0 :(得分:0)
#include <iostream>
using namespace std;
int main()
{
int r = 0;
while (r == 0)
{
char op;
float num1, num2;
char operators[] = { '+', '-', '*', '/' };
bool check1 = false;
cin >> num1;
cin >> op;
for (int i = 0; i < sizeof(operators); i++)
{
if (op == operators[i]) {
check1 = true;
break;
}
}...
它仅适用于字符数组,如果要处理另一个数据类型数组,只需将sizeof()函数除以数据类型的大小
答案 1 :(得分:0)
#include <iostream>
using namespace std;
int main()
{
int r = 0;
while (r == 0)
{
char op;
float num1, num2;
char operators[] = { '+', '-', '*', '/' };
int size=*(&operators +1)-operators;
bool check1 = false;
cin >> num1;
cin >> op;
for (int i = 0; i < size; i++)
{
if (op == operators[i]) {
check1 = true;
break;
}
}...
这适用于所有一维阵列。 指针。
&operators ==>指向由4个元素组成的数组的指针。
(&operators + 1)==>地址前面4个字符 指针类型是指向数组的指针 的4个字符。
*(&operators + 1)==>与(&operators + 1)相同的地址,但是 指针的类型为“ char *”。
*(&opeartors + 1)-运算符==>由于*(&operators + 1)点 到地址4个字符 领先于运营商,差异 两者之间是4。
答案 2 :(得分:0)
您可以使用std::begin
和std::end
。这些函数在迭代器头中定义。
通过使用这些函数,您将可以获得数组的开始和结尾的迭代器,并且还可以更轻松地用容器代替std::vector
,{{1} }或std::array
。
std::set
迭代器标头还包含其他一些函数,用于查找迭代器之间的距离,因此,如果您真的只想要数组的大小,则#include <iterator>
int main()
{
char arr[] = {/*Some content*/};
for(auto it = std::begin(arr); it != std::end(arr); ++it)
{
//Do things here...
}
}
将查找数组开头和结尾之间的距离,即大小。
此代码在您的代码中的应用将是:
auto size = std::distance(std::begin(arr), std::end(arr));
由于此代码现在使用迭代器,因此这也意味着您可以使用标准库定义的基于范围的算法。算法标头包含#include <iostream>
#include <iterator>
int main()
{
int r = 0;
while(r == 0)
{
char op;
float num1, num2;
char operators[] = {'+', '-', '*', '/'};
bool check1 = false;
std::cin >> num1;
std::cin >> op;
for(auto it = std::begin(operators); it != std::end(operators); ++it)
{
if (op == *it)
{
check1 = true;
break;
}
} ...
函数,可在您的代码中按如下所述使用该函数。
std::find
我建议您熟悉C ++中的迭代器,因为它们在STL中得到了广泛使用。最后一行是通过对数组中与数组开始和结尾之间的#include <iostream>
#include <iterator>
int main()
{
int r = 0;
while(r == 0)
{
char op;
float num1, num2;
char operators[] = {'+', '-', '*', '/'};
bool check1 = false;
std::cin >> num1;
std::cin >> op;
check1 = std::count(std::begin(operators), std::end(operators), op);
...
相等的元素进行计数,然后将数字转换为布尔值,因此,如果找不到任何内容,您将得到{{ 1}};但是,您可以将op
替换为false
,但这将需要您检查搜索是否成功,例如std::count
。