简单的二进制搜索对我不起作用。我正在尝试从文本文件中搜索单词

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单的二进制搜索对我不起作用。我正在尝试从文本文件中搜索单词相关的知识,希望对你有一定的参考价值。

我用C ++构建了一个程序,该程序将txt文件中的单词输入到程序中。然后程序将这些单词存储到数组中。现在,我想使用二进制搜索在数组中搜索特定单词。

我的txt文件包含以下单词:

hello
world
hi
how
are
you
i
am
fine
thank
welcome
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>

using namespace std;

int binarySearch(string words[], const string& x,int n)

    int l = 0 ;
    int r = n - 1;
    while (l <= r)
    
        int m = l + (r - l) / 2;

        int res;
        if (x == (words[m]))
            res = 0;

        // Check if x is present at mid
        if (res == 0)
            return m;

        // If x greater, ignore left half
        if (x > (words[m]))
            l = m + 1;

            // If x is smaller, ignore right half
        else
            r = m - 1;
    

    return -1;


int main () 
    ifstream inFile;
    inFile.open("test.txt");

    if(inFile.fail())
        cerr << "Error opening file"<< endl ;

        exit(1);
    

    string x1;
    string words[100];
    int count=0,i=0;
    string str;

    while( !inFile.eof()) 
        inFile >> x1;
        words[i]=x1;
        count++;
        i++;
    

    for (i=0;i<100;i++)
        cout<< words[i]<<endl;
    

    string x;
    x = "how";
    int n = 14;
    int result = binarySearch(words , x,n);
    if (result == -1)
        cout << ("\nElement not present");
    else
        cout << ("Element found at index ") << result;

    return 0;

除了第一个单词你好以外,我找不到其他单词。所以请帮助我。

答案

希望这项工作

#include <iostream>
#include <fstream>
#include <string>
#include <cstring>

using namespace std;

int binarySearch(string words[], const string& x, int n)

    int l = 0;
    int r = n - 1;
    while (l <= r)

    int m = l + (r - l) / 2;

    int res = 0;
    if (x == (words[m]))
        res = 0;

    // Check if x is present at mid
    if (res == 0)
        return m;

    // If x greater, ignore left half
    if (x > (words[m]))
        l = m + 1;

    // If x is smaller, ignore right half
    else
        r = m - 1;


return -1;


int main() 
ifstream inFile;
inFile.open("test.txt");

if (inFile.fail()) 
    cerr << "Error opening file" << endl;

    exit(1);


string x1;
string words[100];
int count = 0, i = 0;
string str;

while (!inFile.eof()) 
    inFile >> x1;
    words[i] = x1;
    count++;
    i++;


for (i = 0; i < 100; i++) 
    cout << words[i] << endl;


string x;
x = "fine";
int n = 11;
int result = binarySearch(words, x, n);
if (result == -1)
    cout << ("\nElement not present");
else
    cout << ("Element found at index ") << result;

return 0;

以上是关于简单的二进制搜索对我不起作用。我正在尝试从文本文件中搜索单词的主要内容,如果未能解决你的问题,请参考以下文章

简单的 Spring @CreatedDate 注释对我不起作用

简单的写入文件对我不起作用

为啥 Class.forName() 对我不起作用?

更改按钮文本不起作用 iOS

- (BOOL)loadShaders 方法对我不起作用

Tailwind css 背景图片对我不起作用