使用嵌套的while循环查找二维数组的数组长度

时间:2019-07-07 17:07:47

标签: c++ while-loop nested-loops

我似乎无法通过嵌套的while循环获取数组长度。行和列可以是任何值,但我需要验证它们是否等于数组长度。数组长度=行数*列数

嵌套的for循环对我没有帮助,因为我不知道输入的数组可能有多长时间。

void add(char arr[][SIZE], int rows, int cols, int val) {
    int arrayStorage = 0;
    int arrayStorage2 = 0;

    while (arr[arrayStorage][arrayStorage2] != 0 && (isalpha(arr[arrayStorage][arrayStorage2]) || isdigit(arr[arrayStorage][arrayStorage2]) || arr[arrayStorage][arrayStorage2] == ' ') && (isprint(arr[arrayStorage][arrayStorage2]) || !(iscntrl(arr[arrayStorage][arrayStorage2]))))
    {
        arrayStorage2 = 0;
        while (arr[arrayStorage][arrayStorage2] != 0 && (isalpha(arr[arrayStorage][arrayStorage2]) || isdigit(arr[arrayStorage][arrayStorage2]) || arr[arrayStorage][arrayStorage2] == ' ') && (isprint(arr[arrayStorage][arrayStorage2]) || !(iscntrl(arr[arrayStorage][arrayStorage2]))))
        {
            arrayStorage2++;

        }
        arrayStorage2--;
        arrayStorage++;
    }

        int storage3 = (arrayStorage2) * arrayStorage;
        cout << storage3;
        char addVal = (char)val;
      if (( storage3 == (rows * cols)) && rows > 0 && rows <= SIZE && cols > 0 && cols <= SIZE)
          {
         // do stuff
          }

}

int main()
{
    char arr4 [][SIZE] = {{'a','b','c',' ',' '}, {'d','e','f',' ',' '}, {'g','r','o','w','n'}, {'n','o','w',' ',' '}};
    add(arr4,4,5,5);
    return 0;
}

storage3数组长度应该为20时为5

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法可能是根本不循环! 更改用作数组的类型。如果不是char arr[][],而是定义一个环绕数组并公开其尺寸的类型。像这样:

template <int tRows, int tCols>
class Array2d
{
public:
     static constexpr int sRows = tRows;
     static constexpr int sCols = tCols;
     char mArr[tRows][tCols]
};

然后,您可以将add函数设为模板函数,并在支票中使用暴露的尺寸

template <class Array_t>
void add(Array_t& arr, int rows, int cols)
{
     int storage3 = Array_t::sRows * Array_t::sCols;
     if (( storage3 == (rows * cols)) && rows > 0 && rows <= SIZE && cols > 0 && cols <= SIZE)
     {
          // do stuff
     }
}