C

时间:2016-03-02 02:37:38

标签: c strcmp

我正在编写一个名为check的函数,它将通过命令行加载的字典的字母字符串与也通过命令行加载的文本进行比较。该函数是一个名为speller的较大函数的一部分,用作拼写检查程序。

我运行了几个printf调试测试来检查strcmp函数中是否正在比较的单词。这个问题来了。该函数发现即使printf测试显示字典和文本中的字符串相同,文本中的所有单词都拼写错误。

不知道从哪里开始,所以任何帮助将不胜感激。非常感谢 以下是特定功能的代码。再次感谢。

typedef struct node {
    char word[LENGTH + 1];
    struct node *next;
} node;

node *hashtable[27];

/* Returns true if word is in dictionary else false. */
int hash_fun (const char key);
bool check (const char *word)
{
    //case-desensitizing
    char caseless[strlen (word)];
    int i, length;
    for (int head = 0; head < 26; head++) {
        hashtable[head] = NULL;
    }
    for (i = 0, length = strlen (word); i < length; i++) {
        //("%c\n",word[i]);
        if (isupper (word[i])) {
            caseless[i] = tolower (word[i]);
        } else {
            caseless[i] = word[i];
        }
    }
    caseless[i] = '\0';
    //printf("-%s  %s-  \n*",word, caseless);
    int word_index = hash_fun (caseless);

    //printf("%i", word_index);

    node *new_node = malloc (sizeof (node));
    if (new_node == NULL) {
        return 2;
    }
    if (word_index >= 0) {
        if (hashtable[word_index] == NULL) {
            hashtable[word_index] = new_node;
            new_node->next = NULL;
        }

        node *cursor = malloc (sizeof (node));
        cursor = hashtable[word_index];

        while (cursor != NULL) {
            //printf("Dictionary:%s and  Text:%s \n", cursor->word, caseless);
            int found;
            found = strcmp (caseless, cursor->word);

            if (found == 0) {
                return true;
            }
            cursor = cursor->next;
        }
    }
    return false;
}

0 个答案:

没有答案