为什么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()
中,只要find
与A[i]
不同,就返回,不要等待A
的第一个元素之后是否出现find
。这样做:
for (int i = 0; i < in; i++)
{
if (find == A[i])
return true;
}
return false;
然后,在Count()
中,您犯了同样的错误:只要N
是true
,您就返回,并且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;
}