为什么 SearchBack 中的 if (find == A[i]) 除了第一次之外没有给出 true?在调试时,除了第一次之外显然不起作用



为什么SearchBack中的if(find == A[i])除了第一次求值都不为真?

#include <iostream>
using namespace std;
int Count(int find, int A[], int size);
bool SearchBack(int A[], int size, int find, int in);
int main()
{
    int A[25] = 
    { 1,2,1,85,14,7,2,2,14,200,7,62,7,19,19,200,17,2,19,20,85,44,63,7,63 }, Q;
    for (int i = 0; i < 25; i++)
    {
        Q = 0;
        Q = Count(A[i], A, 25);
        if (Q != 0)
        {
            cout << A[i] << " : " << Q << endl;
        }
    }
    system("pause");
}
int Count(int find, int A[], int size)
{
    int counter = 0;
    bool N;
    for (int j = 0; j < size; j++)
    {
       if (find == A[j])
       {
            N = SearchBack(A, 25, A[j], j - 1);
            if (N == false)
            {
                counter++;
            }
            else
               return counter;
        }
        return counter;
     } 
 }
bool SearchBack(int A[], int size, int find, int in)
{  
    for (int i = 0; i <= in; i++) 
    {
        if (find == A[i])
            return true;
        else
            return false;
    }
}

您应该更改以下几点:

SearchBack()中,只要findA[i]不同,就返回,不要等待A的第一个元素之后是否出现find。这样做:

for (int i = 0; i < in; i++)  
    {  
        if (find == A[i])  
            return true;  
    }  
return false;

然后,在Count()中,您犯了同样的错误:只要Ntrue,您就返回,并且counter不能增加超过一次。把return counter放到for循环之外

最后,在SearchBack()中,您希望j - 1作为停止条件,而不是main()函数中正在处理的元素的当前位置。例如,您可以将i传递给Count(),然后Count()可以将其传递给SearchBack():

// in main
for (int i = 0; i < 25; i++)
    {
        Q = 0;
        Q = Count(A[i], A, 25, i);
...
// in Count, the current_element correspond to the 'i' above
N = SearchBack(A, 25, A[j], current_element);
...

这样,您将只打印一次A的元素,并显示出现的确切次数。

基于"为什么if(find == A[i])在SearchBack中的求值不为真,除了第一次?"

SearchBack()函数没有问题。在count()函数中,我看到您将return counter放在if条件之后的for循环中,该条件仅在第一次迭代中终止循环。

把return语句放在for循环后面:

int Count(int find, int A[], int size) {
    int counter = 0;
    bool N;
    for (int j = 0; j < size; j++)
     {
        if (find == A[j])
            {
                N = SearchBack(A, 25, A[j], j - 1);
                if (N == false)
                    {
                        counter++;
                    }
                else
                    return counter;
            }
    }
    return counter;
}

相关内容

最新更新