【问题标题】:C++ Finding the last occurrence of an int in a linear searchC++ 在线性搜索中查找最后一次出现的 int
【发布时间】:2017-03-06 22:22:28
【问题描述】:

本周家庭作业我的任务是加载一个包含 1,000 个数字的文本文件,并对用户输入的数字进行线性搜索。我已经完成了线性搜索部分,但我必须找到并打印该整数的最后一次出现。我认为从最后运行数组并打印最后一次出现并中断循环是最简单的。我已经启动了代码,但是在找到最后一次出现时遇到了一些麻烦。

我知道我的第二个 for 循环 向后运行数组是错误的,我只是不确定它有什么问题。任何帮助表示赞赏!谢谢!

#include <iostream>
#include <fstream>
#include <conio.h>

using namespace std;

int main()
{
    ifstream input("A1.txt");
    int find;

    cout << "Enter a number to search for: ";
    cin >> find;

    if (input.is_open())
    {
        int linSearch[1000];

        for (int i = 0; i < 1000; i++)
        {
            input >> linSearch[i];

            for (i = 1000; i > 0; i--)
            {
                if (find == linSearch[i])
                {
                    cout << find << " is at position " << i << ". " << endl;
                }
            }
        }
    }

    _getch();
    return 0;
}

【问题讨论】:

  • 提示:int[1000] 中的最后一个索引是什么?
  • 我现在明白了。谢谢! @Beta

标签: c++ linear-search


【解决方案1】:
    for (int i = 0; i < 1000; i++)
    {
        input >> linSearch[i];

这是一个好的开始。您开始循环将 1000 个数字读入您的数组。

        for (i = 1000; i > 0; i--)

你不觉得这有点为时过早吗?您尚未完成读取文件中 1000 个数字的循环,并且您已经在搜索尚未完全读取的数组。这个逻辑错误有一个非常专业的术语:“本末倒置”。首先,您需要完成循环以读取 1000 个数字。只有这样你才能执行第二个循环。

        {
            if (find == linSearch[i])

好的,现在让我们稍微备份一下。您以i=1000 开始循环。现在,在这里,如果i,第一个值是什么?是 1000。你没发现这里有问题吗?如您所知,1000 个元素的数组“linSearch”包含编号为 0 到 999 的值。总共有 1000 个元素。 i 从 1000 开始,访问不存在的 linSearch[1000] 是未定义的行为,也是一个错误。

您可以在此处调整逻辑,使其正确。但这甚至没有必要这样做。您已经有一个完美的工作循环,可以从文件中读取 1000 个数字。而且您知道要搜索哪个号码。

因此,每次您从文件中读取下一个数字时,如果它是您要查找的数字,您只需存储它的位置。因此,当一切都说完了,存储在该变量中的最后一个位置将是您要搜索的数字的最后一次出现的位置。简单的逻辑。您所要做的就是设置一个标志,表明您正在搜索的号码已被找到。

一旦你决定这样做,你会发现它甚至不再需要首先拥有任何类型的数组。您所要做的就是从文件中读取 1000 个数字,一次一个数字,检查每个数字是否是您要搜索的数字,如果是,保存它的位置。然后,在循环结束时,比较笔记。

【讨论】:

  • 我希望我不必处理数组,而是教授的命令!不过,我现在解决了我的问题。谢谢!
【解决方案2】:

既然是作业,我应该至少有点含糊,而且我绝对不应该使用代码。

您不应该将第二个循环嵌套在第一个循环中。它应该与第一个循环处于相同的缩进级别,并且在右括号之后。

此外,您不应在几乎所有情况下都搜索回 0,而应返回在线性搜索中找到该元素的位置,或者您找到它的位置,而不是进一步。

是的,请注意 Beta 写的内容。

另外,你不应该在每次找到你要找的东西时跳出循环吗?

【讨论】:

    猜你喜欢
    • 2015-06-06
    • 2010-12-11
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 2013-11-03
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多