在C中二进制搜索字符串数组

时间:2013-01-07 12:16:11

标签: c binary-search

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

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

String是def类型。很抱歉在开始时没有澄清这一点。

//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;
}

2 个答案:

答案 0 :(得分:1)

C中的字符串只是char数组,由于使用==的数组之间的比较仅比较起始地址,因此需要使用string.h中的librray函数strcmp来比较内容数组。像这样:

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

修改

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

答案 1 :(得分:0)

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

假设Dictionary是一个排序的单词数组。字符串(char数组)和字符串是一个char数组,那么我假设你做dictionary.words[int].letters 返回类型是一个内存,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;
}

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