Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;在线性搜索中查找int的最后一个匹配项_C++_Linear Search - Fatal编程技术网

C++ C++;在线性搜索中查找int的最后一个匹配项

C++ C++;在线性搜索中查找int的最后一个匹配项,c++,linear-search,C++,Linear Search,本周的作业任务是加载1000个数字的文本文件,并对用户输入的数字进行线性搜索。我已经完成了线性搜索部分,但我必须找到并打印该整数的最后一个匹配项。我认为从最后运行数组并打印最后一个匹配项并打破循环是最简单的。我已经开始编写代码,但在查找最后一个事件时遇到了一些问题 我知道我的第二个for loop反向运行数组是错误的,我只是不确定它到底是怎么回事。感谢您的帮助!谢谢大家! #include <iostream> #include <fstream> #include &l

本周的作业任务是加载1000个数字的文本文件,并对用户输入的数字进行线性搜索。我已经完成了线性搜索部分,但我必须找到并打印该整数的最后一个匹配项。我认为从最后运行数组并打印最后一个匹配项并打破循环是最简单的。我已经开始编写代码,但在查找最后一个事件时遇到了一些问题

我知道我的第二个for loop反向运行数组是错误的,我只是不确定它到底是怎么回事。感谢您的帮助!谢谢大家!

#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;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
ifstream输入(“A1.txt”);
int-find;
找不到;
if(input.is_open())
{
国际林研[1000];
对于(int i=0;i<1000;i++)
{
输入>>linSearch[i];
对于(i=1000;i>0;i--)
{
if(find==linSearch[i])
{

cout因为这是家庭作业,我可能至少应该有点含糊不清,而且我绝对不应该使用代码

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

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

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

还有,你不是应该在每次找到你要找的东西时就跳出这个循环吗

    for (int i = 0; i < 1000; i++)
    {
        input >> linSearch[i];
你不认为这有点为时过早吗?你还没有完成读取文件中1000个数字的循环,而且你已经在搜索尚未完全读取的数组。这个逻辑错误有一个非常专业的术语:“本末倒置”。首先,您需要完成循环以读取1000个数字。然后才能执行第二个循环

        {
            if (find == linSearch[i])
好的,现在让我们后退一点。您是以
i=1000
开始循环的。现在,在这里,如果
i
,第一个值是什么?它是1000。您没有看到问题吗?1000元素数组,“linSearch”,如您所知,包含编号为0到999的值。这总共是1000个元素。如果
i
以值1000开始,则访问不存在的linSearch[1000]是未定义的行为,是一个bug

你可以在这里调整逻辑,使其正确。但这甚至不是必须的。你已经有了一个完美的工作循环,可以从文件中读取1000个数字。你知道你要搜索哪个数字

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


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

提示:
int[1000]
中的最后一个索引是什么?我现在明白了。谢谢!@BetaI希望我不必使用数组,而是教授的命令!我现在解决了我的问题。谢谢!
        {
            if (find == linSearch[i])