使用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,顾后面跟其他的名则不会显示
find() 函数的行为没有问题,但是你在判断 if(stu[i].Name.find(f) + 1) 中的条件有问题。
find() 函数返回第一次找到关键字的位置的下标,当没有找到时返回 string::npos。应该将判断条件改为
if (stu[i].Name.find(f) != string::npos)
当find找不到返回-1,你的判断条件相当于如果返回0就执行,因此顾甄和顾真会同时被打印。