【发布时间】:2021-04-15 15:40:41
【问题描述】:
我已经实现了这种二进制搜索算法,目的是找到包含在数组中的所需字符。考虑到 ASCII 表,我尝试以标准方式进行 'if' 'else' 比较:[ if ( searchElement > arrayChar[mid] ... etc ]。这似乎不起作用,所以我意识到也许它与字符串比较有关。我现在使用函数 strcmp 并使用它的返回值进行比较:
(如果 string1 负值。如果 string1 > string2 -> 正值。如果 string1 == string2 -> 0。)
它似乎也不能正常工作。
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
int binarySearch(int arraySize, char arrayChar[]) {
// Variable declaration;
char searchElement[2];
int startingPoint = 0, endingPoint = arraySize - 1;
// Input for desired search element;
printf("\nSearch for: ");
scanf(" %c", &searchElement);
while (startingPoint <= endingPoint) {
int mid = (startingPoint + endingPoint) / 2;
if (strcmp(searchElement, arrayChar[mid]) == 0) {
return mid;
}
else if (strcmp(searchElement, arrayChar[mid]) < 0)
endingPoint = mid - 1;
else {
if (strcmp(searchElement, arrayChar[mid]) > 0)
startingPoint = mid + 1;
}
}
return -1;
}
int main() {
// Array declaration;
char randomCharArray[7] = {'a', 'c', 'e', 'f', 'f', 'g', 'h'};
// Calling binarySearch() ;
if (binarySearch(6, randomCharArray) == -1) printf("Element not found!");
else printf("Element found in [%d] .", binarySearch(6, randomCharArray));
return 1;
}
【问题讨论】:
-
使用
%c阅读并不能确保searchElement[1] == '\0'。字符串比较依赖于以空字符结尾的字符串。但是由于您将arrayChar[mid]传递给strcmp(),因此您传递的是一个字符,而不是一个字符串。事实上,您应该将调用strcmp()替换为if (searchElement == arrayChar[mid])等,因为您正在比较单个字符,而不是字符串。
标签: c string search binary char