如何在我的基本计算器中遍历数组

时间:2018-07-10 20:14:36

标签: c++ arrays loops calculator elements

所以我有这段代码,我不知道如何通过将元素数放入循环条件中来循环遍历由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;
            }
        }...

对不起,希望继续学习正确的代码

3 个答案:

答案 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::beginstd::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