使用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函数包含头文件,若找到返回第一次出现的位置下标,否则返回-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

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

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

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