为什么我们在访问指向字符串的指针数组中的每个字符串*中的每个字符时有一个三维数组

Why do we have a three dimensional array when accessing each character in each string* in an array of pointers to strings?

本文关键字:数组 字符串 三维 有一个 字符 指针 我们 访问 为什么      更新时间:2023-10-16

我正在查看去年过去的家庭作业,但我从来没有弄清楚为什么这适用于检查数组中的每个字符串是否都是回文(单词向后拼写是同一个单词 - "赛车"(:

for (int k = 0; k < numElems; k++){
    pStatus = true;
    lastLetter = (*ptrArray[k]).length() - 1;
    for (int i = 0; i <= (lastLetter / 2); i++){
        if (ptrArray[k][0][i] != ptrArray[k][0][lastLetter - i]) 
            pStatus = false;
    }
    if (pStatus == true){
        //...
    }
}

如果我没记错的话,我通过反复试验编写了这段代码,当时二维会给我奇怪的结果。我只是弄乱了代码,并在对它不起作用感到沮丧后尝试了奇怪的事情。

因此,要访问数组中每个字符串中的每个独立字符,我需要编写ptrArray[k][0][lastLetter - i]而不是ptrArray[k][lastLetter - i]。 这是为什么呢?


编辑:

你们中的一些人想要更多的代码,我想我忽略了ptrArray是指向字符串的指针指针的事实(我记得在这个作业中我们必须使用指向指针数组的指针(。这就是我们需要介绍[0]的原因吗?下面是函数的原型:

void checkIfPalindrome(string **ptrArray, int numElems);

我动态分配了指针数组。

string **ptrArray;
ptrArray = new string*[numElems];

您的类型是 string**string本身是一个数组类型,所以我们实际上有一个三维数组。 ptrArray[k]访问指向string的指针,ptrArray[k][0]访问string(实际上等同于*(ptrArray[k])(,ptrArray[k][0][i]访问地址ptrArray[k]中指针指向的数组"第一个"字符串中的第 i 个字符。

我将对您的代码做出一些假设,因为所有使用的变量都不在范围内。让我们尝试用伪代码编写算法。

strings = [ "str1", "str2",... ]
for each s in strings:
    is_palindrome = true
    last_index = s.length - 1
    for i in [0, last_index]:
        if s.charAt(i) != s.charAt(last_index - i)
            is_palindrome = false
    if is_palindrome == true:
       #...

实际上只在算法中使用了两个维度,因为您始终访问第二个维度中的第 0 个元素。因此,我们可以像

std::vector<std::string> ptrArray = ...;
int numElems = ptrArray.length();
for (int k = 0; k < numElems; k++){
    pStatus = true;
    lastLetter = ptrArray[k].length() - 1;
    for (int i = 0; i <= (lastLetter / 2); i++){
        if (ptrArray[k][i] != ptrArray[k][lastLetter - i]) {
            pStatus = false;
        }
    }
    if (pStatus == true){
        //...
    }
}

其中ptrArray是字符串的数组ptrArray[i]是第 i 个字符串,ptrArray[i][j] 是第 i 个字符串的第 j 个字符。