如何解决用 C 中的字符串进行二分搜索
我已经实现了这个二分搜索算法,目的是找到一个包含在数组中的所需字符。考虑到 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','g','h'};
// Calling binarySearch() ;
if (binarySearch(6,randomCharArray) == -1) printf("Element not found!");
else printf("Element found in [%d] .",binarySearch(6,randomCharArray));
return 1;
}
解决方法
您似乎在区分单个 char
值和字符串时遇到问题,字符串是连续的 char
值序列,以一个值为 0 结尾。单个 char
值对可以与标准关系和等式测试运算符(<
、>
、==
、等.)进行比较。可以通过 strcmp()
函数比较字符串对。 单个 char
不能直接与字符串进行比较,而且无论如何您都没有字符串,因为 binarySearch()
的 searchElement
的内容和main()
的 randomCharArray
以 null 结尾。
这使我想到了建议 1:将 searchElement
设为 char
,而不是数组,因为您知道只需要它来表示单个 char
:
char searchElement;
完成后,您现在可以(建议 2)通过标准运算符将 searchElement
的值与 arrayChar
的元素进行比较,正如您最初尝试做的那样。例如,
// with 'searchElement' as a char,not a char[]:
if (searchElement == arrayChar[mid]) {
或者,如果您将 searchElement
作为数组保留,那么您可以使用 searchElement[0]
访问其第一个 char
以进行比较。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。