0

我想用 C 编写一个对字符串数组的二进制搜索。

我已经编写了这段代码,它编译时没有错误,但是当我尝试搜索时,它没有给出任何结果。任何帮助,将不胜感激。

字符串是一个类型定义。很抱歉一开始没有澄清这一点。

//Looks up word s, in dictionary.
bool lookup(string s)
{  
    int min = 0;
    int max = dictionary.size - 1;
    int mid;
    bool found = false;

    while (min <= max && !found)
    {
        mid = (min + max) /2;
        if (dictionary.words[mid].letters == s)
            found = true;
        else if (dictionary.words[mid].letters > s)
            max = mid -1;
        else
            min = mid + 1;
    }
    return found;
}
4

2 回答 2

1

C中的String只是char数组,由于数组之间的比较使用==只比较起始地址,所以需要使用librray函数strcmpstring.h比较数组的内容。像这样:

if (strcmp(dictionary.words[mid].letters, s) == 0)

编辑

我看到尽管有c标签,但你有某种string类型。这是 C 还是 C++?

于 2013-01-07T12:21:22.683 回答
0

我认为如果您粘贴字符串和字典结构会有所帮助。

假设 Dictionary 是 word.Strings (char 数组)的排序数组,而 string 也是 char 数组,那么我会假设当您执行dictionary.words[int].letters 此操作时,返回类型是内存,而 .Strings 也是如此s。由于这两个字符串保存在不同的内存位置,因此您无法找到该字符串。

尝试遍历字符串以比较字符串

bool lookup(string s)
{  
    int min = 0;
    int max = dictionary.size - 1;
    int mid;
    bool found = false;
    int i;
    int length = 0;                 //calculate the length of the input string
    while (s[length] != '\0')
    {
    length++;
    }

    while (min <= max && !found)
    {
        mid = (min + max) /2;
        for(i=0;i<length;i++)
        {
            if(dictionary.words[mid].letters[i] == '\0')
                break;
            if (dictionary.words[mid].letters[i] == s[i])
                continue;
            else if (dictionary.words[mid].letters[i] > s[i])
                max = mid -1;
            else
                min = mid + 1;
            break;
        }
        if(i==length)
            found=true;
    }
    return found;
}

我还没有编译代码,但这应该给你要点。

于 2013-01-07T13:05:12.013 回答