二进制搜索一个单词

时间:2016-04-29 20:25:57

标签: c++

我对编程非常陌生,我目前正尝试使用.txtvector文件中的单词二进制搜索编写代码。如果没有将搜索到的单词写入.txt文件,程序会检查是否找到该单词。问题是我不太确定我是否正确使用std::vector而且我差不多确保我的BinarySearch()功能存在很大问题。我已经在互联网上阅读了binary_search的几乎所有代码,但我无法使其正常工作。我真的可以使用一些帮助... 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;

1 个答案:

答案 0 :(得分:2)

你非常接近。但是你必须学会​​使用调试器,因为这是一个非常简单的问题。这一行:container说:

  1. middle
  2. 获取search个元素
  3. 将其与if
  4. 进行比较
  5. 如果按字母顺序提前执行else - 阻止,否则执行if - 阻止
  6. last - 块移动string以按字母顺序搜索较早的if(container[middle] > search) s,这与您想要的相反。这行应该说:

    vector<string>

    以下是我更改该字符后代码正常工作的实例:http://ideone.com/vvbONO

    听起来这是一个编程任务,在这种情况下,你的老师可能不会对你解决这个问题感到满意,但是既然你已经正确使用了排序BinarySearch,你也可以使用:{ {3}}完全取代BinarySearch(sWord,find); 。只需替换它:

    cout << (binary_search(cbegin(sWord), cend(sWord), find) ? "word is found" : "Not found") << endl;
    

    使用:

    "Statement"

    如果您有任何疑问,请发表评论!