簡體   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