C++ 单词的二进制搜索

C++ 单词的二进制搜索,c++,C++,我对编程非常陌生,目前正在尝试编写一个代码,使用vector在.txt文件中对单词进行二进制搜索。程序会检查是否找到了单词,如果没有,则会将搜索到的单词写入.txt文件。问题是我不太确定我是否正确使用了std::vector,我几乎可以肯定我的BinarySearch()有一个大问题功能。我已经阅读了互联网上几乎所有关于二进制搜索的代码,但我就是不能让它工作。我真的需要一些帮助。。。txt文件已排序(每行一个单词)。当前代码在15个单词中仅找到2-3个。以下是我的最新尝试: void B

我对编程非常陌生,目前正在尝试编写一个代码,使用
vector
.txt
文件中对单词进行二进制搜索。程序会检查是否找到了单词,如果没有,则会将搜索到的单词写入
.txt
文件。问题是我不太确定我是否正确使用了
std::vector
,我几乎可以肯定我的
BinarySearch()有一个大问题
功能。我已经阅读了互联网上几乎所有关于
二进制搜索的代码,但我就是不能让它工作。我真的需要一些帮助。。。txt文件已排序(每行一个单词)。当前代码在15个单词中仅找到2-3个。以下是我的最新尝试:

    void BinarySearch(vector<string> cont,string s)
{       
        int middle;
        int first=0;
        int leng=cont.size();
        int last=leng-1;
        bool found=false;



        while(first<=last && !found)
        {
            middle=(first+last)/2;

            if(cont[middle]==s)
            {
            found=true;
            }

            else {

            if(cont[middle]<s)
            {
            last=middle-1;
            }

            else
            {
            first=middle+1;
void二进制搜索(向量cont,字符串s)
{       
中间;
int first=0;
int leng=连续大小();
int last=leng-1;
bool-found=false;

虽然(首先你非常接近。但是你必须学会使用调试器,因为这是一个非常简单的捕获。这一行:
if(container[middle]你非常接近。但是你必须学会使用调试器,因为这是一个非常简单的捕获。这一行:
if(container[middle]您可以从名为调试器的工具获得大量帮助。单步执行代码,逐语句查看一个或多个变量。让我们知道哪些语句是问题的原因。您可以从名为调试器的工具获得大量帮助。单步执行代码,逐语句查看一个或多个变量。让我们知道哪些语句是问题的原因。我已经更改了较小或较大的符号,但仍然只找到2-3个单词…可能是txt文件有问题,尽管我没有发现任何问题:(我已经阅读了本页的二进制搜索,但我不太明白如何将其与代码开头的向量相结合。感谢您花时间回答并提供帮助:)@J.所以请使用你的调试器和我链接的实例:如果你可以复制那里的行为,然后将其添加到你的问题中。但我怀疑的是:你的
向量
没有排序。如果不是这样,请显示
查找导致你的
二进制搜索
失败的内容。你也可以将你的
BinarySearch
调用交换为
BinarySearch
行,我们都知道这行是正确的。看看你的答案是否不同。是的,我终于找到了答案并管理好了,我想我应该只让我的文本文件在开头的一行有一个单词。我对向量进行了排序,现在效果很好。谢谢!嘿,我是just想说代码做得很好。你基本上已经拥有了它,事实上,只需要一点调试,你根本不需要我。希望你使用的是Visual Studio,它的调试非常简单和直接。他们这里有一个很好的指南:不幸的是,我没有。事实上,我们的老师已经禁止使用任何IDE,这就是为什么我一直是一个程序员有点害怕使用调试器(主要是因为他曾经向我们展示过的东西,当时看起来很复杂,听起来很愚蠢)。但我将从现在开始使用它,所以我会处理像这样的简单错误。再次感谢您的帮助:)我已经更改了更小或更大的符号,但它仍然只能找到2-3个单词…可能是txt文件有问题,尽管我看不出有任何问题:(我已经阅读了本页的二进制搜索,但我不太明白如何将其与代码开头的向量相结合。感谢您花时间回答并提供帮助:)@J.所以请使用你的调试器和我链接的实例:如果你可以复制那里的行为,然后将其添加到你的问题中。但我怀疑的是:你的
向量
没有排序。如果不是这样,请显示
查找导致你的
二进制搜索
失败的内容。你也可以将你的
BinarySearch
调用交换为
BinarySearch
行,我们都知道这行是正确的。看看你的答案是否不同。是的,我终于找到了答案并管理好了,我想我应该只让我的文本文件在开头的一行有一个单词。我对向量进行了排序,现在效果很好。谢谢!嘿,我是just想说代码做得很好。你基本上已经拥有了它,事实上,只需要一点调试,你根本不需要我。希望你使用的是Visual Studio,它的调试非常简单和直接。他们这里有一个很好的指南:不幸的是,我没有。事实上,我们的老师已经禁止使用任何IDE,这就是为什么我一直是一个程序员有点害怕使用调试器(主要是因为他曾经向我们展示过的东西,当时看起来很复杂,听起来很愚蠢)。但我将从现在开始使用它,所以我会处理像这样的简单错误。再次感谢您的帮助:)
if(container[middle] > search)
BinarySearch(sWord,find);
cout << (binary_search(cbegin(sWord), cend(sWord), find) ? "word is found" : "Not found") << endl;