我有一个有效的二进制搜索功能,要求用户输入一个名字,它会在学生数组结构中搜索它并显示该学生相应的平均 GPA。除非用户输入句点,否则它会一直循环让用户输入要搜索的名称。
我遇到的问题是我正在使用的 break
语句。我需要遵循的此函数的要求不允许我使用 break
语句。
但是,如果我删除 break
语句,我的二分搜索将无限地打印出输出语句并且将不再正常工作。
有没有办法解决这个问题而不使用 break
语句?我有一种感觉,我可以使用多个 if
语句来代替 break
语句。
void binarySearch(Student* ptr, int MAXSIZE)
{
string target;
string period = ".";
int first = 0,
last = MAXSIZE - 1,
mid;
do
{
cout << "Enter student name (Enter . to stop): ";
cin >> target;
while (first <= last)
{
mid = (first + last) / 2;
if (ptr[mid].name.compare(target) == 0)
{
cout << "Student " << target << " :gpa " << ptr[mid].avg << endl;
first = 0;
last = MAXSIZE - 1;
break; // I am stuck on making the binary search work without using this break statement
}
else if (ptr[mid].name.compare(target) < 0)
last = mid - 1;
else
first = mid + 1;
}
if (first > last && target.compare(period) != 0)
{
cout << "This student was not found. Enter another name" << endl;
first = 0;
last = MAXSIZE - 1;
}
} while (target.compare(period) != 0);
}
最佳答案
在你的循环中引入一个bool
!
bool nameFound = false;
while (first <= last && !nameFound)
{
mid = (first + last) / 2;
if (ptr[mid].name.compare(target) == 0)
{
cout << "Student " << target << " :gpa " << ptr[mid].avg << endl;
first = 0;
last = MAXSIZE - 1;
nameFound= true;
}
...
}
关于c++ - 有没有办法解决使用 break 语句的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35121683/