使用C中的字符串进行二进制搜索



我实现了这种二进制搜索算法,目的是找到数组中包含的所需字符。考虑到ASCII表[if(searchElement>arrayChar[mid]…etc],我尝试用标准的方式进行"if"one_answers"else"的比较。这似乎不起作用,所以我意识到这可能与字符串比较有关。我现在使用函数strcmp并使用其返回值进行比较:

(如果字符串1<字符串2->为负值。如果字符串1>字符串2->为正值。如果字符串1==字符串2-<为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;

}

您似乎在区分单个char值和字符串时遇到了问题,因为字符串是以值0结尾的连续char值序列。单个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进行比较。

相关内容

  • 没有找到相关文章

最新更新