在我的主文件中,我有一个字符串数组,字符名称[320] [30],然后我用冒号排序。我希望能够进行递归二进制搜索,以确定名称数组中是否存在单词以及索引是什么。索引由一组无符号整数表示,unsigned int Set [10]。如果该单词不存在,则该函数应返回-1。
#include "set.h"
#include "sortAndSearch.h"
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int binarySearch(Char A[][30], char *, int, int){
//this gets passed the global array names
//and the spot we're looking for is the char pointer
//other 2 ints are low = 0, and high = 319
//then it finds mid, a point between high and low
//and then does the same thing on whichever half it needs
//until it finds the index its looking for
//this is recursive because of the low and high values provided
int mid, low, high, result;
//calculate midpoint to cut set in half
mid = (high + low)/2;
//comparison
result = strcmp(A[mid], key);
//if result < 0, A[mid] < key
if(result < 0)
return binarySearch(A, key, mid+1, high);
//if result > 0, A[mid] > key
else if(result > 0)
return binarySearch(A, key, low, mid-1);
//if result == 0, A[mid] == key
else if(result == 0)
return mid;
//couldnt find it
else
return -1;
//this should return int, either
//the index where the string being searched for is stored in the array
//or -1 to indicate that the string beinng sought is not in the array
}
在我的主要功能中,我调用了函数:
char *key;
binarySearch(names, key, 0, 319);
当我尝试编译时,我收到以下错误:
所以我的问题是为什么我会收到这些错误,因为我没有看到任何拼写错误,以及与原型不匹配的参数数量是多少?我从给出的sortAndSearch.h文件中复制了它。
答案 0 :(得分:1)
我认为错误为Char A[][30]
,应为char A[][30]
标准C
中没有名称Char
的数据类型
答案 1 :(得分:1)
尝试在Char
的定义下将char
更改为binarySearch
,然后查看您的代码是否已编译。
始终检查第一个编译错误。这个错误可能导致许多其他看似随机的错误,这似乎正在经历。
答案 2 :(得分:1)
我认为这是C? int binarySearch(Char A[][30], char *, int, int)
不是有效的函数定义int binarySearch(char A[][30], char *s, int a, int b)
。试试吧。
没有名称的表单可能会出现在头文件中。头文件有足够的信息供编译器检查每个参数的数据类型(AKA参数),但它不需要(当它读取头时)任何更多信息。此时编译器能够使用(调用)函数来检查任何代码是否正确。这被称为函数签名。
当编译器看到实际的函数定义时,它需要参数的名称(AKA参数),以便代码可以引用它们,参数是变量。所以它需要名字。
答案 3 :(得分:0)
您需要重新阅读C的基础知识。这是一种区分大小写的语言,Char
不是char
。
答案 4 :(得分:0)
int binarySearch(Char A[][30], char *, int, int){
Char
应该是char
(C是区分大小写的语言)。因为这是错误的,大多数其他编译错误都是编译器混淆的结果。
您还需要为函数定义中的其他参数指定名称:
int binarySearch(Char A[][30], char *key, int low, int high){
然后,您不需要low
和high
作为单独声明的局部变量(实际上,您不能将它们声明为局部变量和参数)。
我相信函数中的逻辑还有一个错误:
if (result < 0)
return binarySearch(A, key, mid+1, high);
else if (result > 0)
return binarySearch(A, key, low, mid-1);
else if (result == 0)
return mid;
else
return -1;
所有值都大于,小于或等于零; else
子句是多余的。
但是,您在终止搜索时也遇到问题。在计算low
之前,您需要检查high
是否大于mid
,如果要搜索的范围为空,则应返回未找到的-1
。< / p>
答案 5 :(得分:0)
在第5行,函数定义需要与声明匹配。检查sortAndSearch.h以获取该函数的先前声明。 它应该
int binarySearch(char A[][30], char *key, int low, int high){
在第14行,不应声明低和高,并且它应该作为参数传递给函数。它应该
int mid, result;
否则它看起来不错。