久梦青岚 2023-01-11 22:02 采纳率: 0%
浏览 23

使用cstring头文件中的find函数进行模糊查找时出现奇怪的现象

使用cstring头文件中的find函数进行模糊查找时出现奇怪的现象

void Studentmanage::Fuzzyfind() {
    char f[100];



    cout << "请输入关键字:" << endl;
    cin >> f;
    int cnt = 1;


    for (int i = 0; i < n; i++) {
        if (stu[i].Name.find(f) + 1) {//find函数包含头文件<cstring>,若找到返回第一次出现的位置下标,否则返回-1;
            if (cnt == 1) {
                cout << "相关学生信息如下:" << endl;
                cout << "学号" << '\t' << '\t' << "姓名" << '\t' << "数学" << '\t' << "物理" << '\t' << "英语" << '\t' << endl;
            }

            cout << stu[i].Id << '\t' << stu[i].Name << '\t' << stu[i].Math << '\t' << stu[i].Physics << '\t' << stu[i].English << endl;
            cnt++;
        }
    }if (cnt == 1){ cout << "没有与该信息匹配的学生,请重新输入!" << endl; return; }
    return;//这里的结构体变量已经赋值,相关数据在文件里

模糊搜索“苏”会莫名其妙出现顾zhen,顾后面跟其他的名则不会显示

img


把顾真真换成顾甄,顾真都不行,想问一下大家是代码出了什么问题还是find函数有什么漏洞?

img

  • 写回答

1条回答 默认 最新

  • 流比 2023-01-11 22:38
    关注

    find() 函数的行为没有问题,但是你在判断 if(stu[i].Name.find(f) + 1) 中的条件有问题。

    find() 函数返回第一次找到关键字的位置的下标,当没有找到时返回 string::npos。应该将判断条件改为
    if (stu[i].Name.find(f) != string::npos)

    当find找不到返回-1,你的判断条件相当于如果返回0就执行,因此顾甄和顾真会同时被打印。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月11日

悬赏问题

  • ¥15 关于#c语言#的问题:我在vscode和codeblocks中编写c语言时出现打不开源文件该怎么办
  • ¥15 非科班怎么跑代码?如何导数据和调参
  • ¥15 福州市的全人群死因监测点死亡原因报表
  • ¥15 Altair EDEM中生成一个颗粒,并且各个方向没有初始速度
  • ¥15 系统2008r2 装机配置推荐一下
  • ¥500 服务器搭建cisco AnyConnect vpn
  • ¥15 悬赏Python-playwright部署在centos7上
  • ¥15 psoc creator软件有没有人能远程安装啊
  • ¥15 快速扫描算法求解Eikonal方程咨询
  • ¥15 校内二手商品转让网站