「已注销」 2022-12-11 16:35 采纳率: 90.2%
浏览 27
已结题

C++用迭代器实现二分搜索

问题遇到的现象和发生背景 二分搜索报错
遇到的现象和发生背景,请写出第一个错误信息
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
#include<iostream>
#include<string>
using namespace std;
int main()
{
    string a("ABCDEFG") ;
    string k="B";
    auto i=a.begin(),j=a.end();
    auto m=a.begin()+(j-i)/2;
    while(m!=j&&*m!=k){
        if(k<*m)
            j=m;
        else
            i=m+1;
        m=i+(j-i)/2;
    }
    if(*m==k)
        cout<<m<<endl;
    else
        cout<<"Not founded!"<<endl;
    return 0;
}

运行结果及详细报错内容 从第10行开始报错
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60% 照着《Primer C++》写的用迭代器实现二分搜索,不知道为什么报错了几百行
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”
  • 写回答

1条回答 默认 最新

  • Huazie 全栈领域优质创作者 2022-12-12 10:48
    关注
    • 首先 K是个字符串,*m 是个char类型,把 k 定义成一个 char类型就行了
    • cout 要输出 *m, 不支持 输出 m,

    参考如下:

    #include<iostream>
    #include<string>
    
    using namespace std;
    
    int main()
    {
        string a("ABCDEFG") ;
        char k= 'B';
        auto i=a.begin(),j=a.end();
        auto m=a.begin()+(j-i)/2;
        while(m!=j&&*m!=k){
            if(k<*m)
                j=m;
            else
                i=m+1;
            m=i+(j-i)/2;
        }
        if(*m==k)
            cout << *m << endl;
        else
            cout<<"Not founded!"<<endl;
        return 0;
    }
    

    如有帮助,欢迎点赞+采纳哈!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月20日
  • 已采纳回答 12月12日
  • 创建了问题 12月11日

悬赏问题

  • ¥15 informer代码训练自己的数据集,改参数怎么改
  • ¥15 请看一下,学校实验要求,我需要具体代码
  • ¥50 pc微信3.6.0.18不能登陆 有偿解决问题
  • ¥20 MATLAB绘制两隐函数曲面的交线
  • ¥15 求TYPCE母转母转接头24PIN线路板图
  • ¥100 国外网络搭建,有偿交流
  • ¥15 高价求中通快递查询接口
  • ¥15 解决一个加好友限制问题 或者有好的方案
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验