1

所以我有一个输入文件。它由 40 个数字组成。前 20 个数字被输入到一个数组中(我已经检查过了,它们实际上就在那里)。然后我关闭并重新打开输入文件。我使用顺序搜索将输入文件中的前 20 个数字与我的数组进行比较。这意味着他们都应该成功。然后我将接下来的 20 个数字与我的数组中的数字进行比较,它们应该都是不成功的搜索。我的数组此时未排序。

我遇到的问题是,使用顺序永远找不到最后一个成功的数字。我不知道如何解决这个问题。

这是顺序搜索功能:

length = 19;

void Search::sequential(ItemType item, bool& found)
{ 
  int place = 0;
  while (place < length && item != list[place])
    place++;
  found = (place < length); 
}

这是我成功/不成功的循环

outFile << "\n\n ************Sequential Successful ********** \n";
outFile << endl << "ID" << endl;

inFile >> num;
for(int i=0; i<=length && inFile; i++)
{
  search.sequential(num, found);
  if (found)
    outFile << num << endl; 

  inFile >> num;
} 


//sequential unsuccessful
outFile << "\n\n ************Sequential unsuccessful ********** \n";
outFile << endl << "ID" << endl;

for(int i=0; i<=length && inFile; i++)
{
  search.sequential(num, found);
  if (!found)
    outFile << num << endl; 

  inFile >> num;
}

但是,我的输出是:

 ************Sequential Successful ********** 

 ID
 1111
 3352
 4567
 5678
 6789
 7890
 8901
 9012
 1223
 2113
 8546
 2374
 4723
 9573
 3284
 7474
 8594
 3589
 5858
 //THERE SHOULD BE 1925 HERE BUT THERE ISN'T

  ************Sequential unsuccessful ********** 

 ID
 9456
 3584
 2222
 4319
 4477
 5710
 5497
 1502
 1599
 1504
 1506
 9943
 8833
 9944
 6678
 5555
 5660
 9911
 6130
 1613

如果我删除“if (found)”语句,一切正常,但我如何在不删除它的情况下解决这个问题?

提前致谢

- - - - - - - -编辑 - - - - - - - -

好的,当我将长度更改为 20 时,它似乎仍然不起作用。我迷路了。

这是我创建数组的地方

inFile >> num;
for (int i=0; i<length && inFile; i++)
{
  search.addToList(num);
  inFile >> num;
}

这是 addToList 函数

 void Search::addToList(ItemType num)
 {
   if (index < length)  //ive tried taking out this statement just to see if it makes a difference and it didn't
   {
     list[index] = num;
     index++;
   }
 }

我在构造函数中将索引初始化为 0

这就是我声明数组的方式

    ItemType list[length]; 

有用!!!!非常感谢大家!我真的很感激。

4

5 回答 5

3

有 2 个解决方案:长度应该得到 20 作为值

length = 20;

使用“<=”代替“<”(在这种情况下,“length”应命名为“lastIndex”)

void Search::sequential(ItemType item, bool& found) 
{  
  int index = 0; 
  while (index <= length && item != list[index]) 
    index++; 
  found = (index <= length);  
} 
于 2010-12-09T15:33:19.970 回答
0

经典的一对一问题。有关代码更正,请参阅@Kipotlov 的答案。

于 2010-12-09T15:47:48.063 回答
0

看看你的搜索功能,当你试图找到第 20 个数字时,索引会有什么值?

于 2010-12-09T15:28:36.670 回答
0

如果您有 20 个数字,那么为什么将长度设置为 19?这是非常违反直觉的。

于 2010-12-09T15:30:40.600 回答
0

使用 C 的索引顺序搜索

此代码适用于所有情况,即如果我们在数组中找到最后一个元素,则此代码将起作用...

#include<stdio.h>
void main()
{
  int d[100],kin[20],pin[20],temp,k,i,j=0,n,n1=0,start,end;
  printf("Enter the number of elements:");
  scanf("%d",&n);
  for(i=0;i<n;i++)
    scanf("%d",&d[i]);
  printf("Enter the number to be searched:");
  scanf("%d",&k);
  for(i=0;i<n;i+=3)
  {
    kin[n1]=d[i];
    pin[n1]=i;
    n1++;
  }
  if(k < kin[0])
  {
    printf("element not found");
    exit(0);
  }
  else
  {
    for(i=1;i<=n1;i++)
      if(k < kin[i] )
      {
        start=pin[i-1];
        end=pin[i];
        break;
      }
      else
      {
        start=n1;
        end=n-1;
      }
  }
  for(i=start;i<=end;i++)
  {
    if(k==d[i])
    {
      j=1;
      break;
    }
  }
  if(j==1)
    printf("element found at position %d",i);
  else
    printf("element not found");
}
于 2016-11-06T14:45:44.367 回答