繁体   English   中英

C ++查找线性搜索中最后一次出现的int

[英]C++ Finding the last occurrence of an int in a linear search

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

我知道我的第二个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;
}
    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个数字,一次读取一个数字,检查每个数字是否是您要搜索的数字,如果是,请保存其位置。 然后,在循环结束时,比较笔记。

既然是家庭作业,我应该至少有点模糊,我绝对不应该使用代码。

您不应该在第一个循环中嵌套第二个循环。 它应该与第一个循环的闭合括号处于相同的缩进级别。

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

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

另外,每当你找到你想要的东西时,你不应该突破循环吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM