1

我正在尝试(并且遇到麻烦)编写一个程序(在 C 中),它在命令行中接受一个字符串(例如 $ test.out "This is a string")并通过字符串查找动词(和名词,但如果我能认出动词,我就可以自己做名词了)。

文件 lexicon.h 中给出了按字母顺序排序的动词列表,这是我应该用作字典的内容。

我知道如何从命令行接受字符串并使用该输入创建一个字符串数组,每个字符串本身都是一个单独的单词,我已经有一个可以做到这一点的工作程序,我希望使用其中的一部分对于这个。

我应该创建一个名为 binary_search(...stuffgoeshere...) 的函数并使用它来搜索词典文件并找到动词。

我想要一些关于如何创建一个函数 (binary_search) 的建议或指导,该函数可以检查一个已经分隔的单词是否与 lexicon.h 列表中的任何单词匹配。我不希望有人只写一个答案,我想知道你为什么建议你做什么。希望我能从中学到一些有趣的东西!

我知道这很混乱,但这就是我到目前为止所拥有的。

另请注意,lexicon 的动词数组有 637 个值(当我使 int size = 637 时看到)该程序不再编译,因为我还没有弄清楚如何使 binary_search 函数工作。我正在尝试修改类示例中使用的二进制搜索函数,但是,该函数对文本文件中的数字进行排序,而不是字符串。

如果还有什么我应该包括的,请告诉我。谢谢您的帮助!

    #include <stdio.h>
    #include <string.h>
    #include "lexicon.h"

    int binary_search(char word[], char verbs[][], int size);

    int
    main(int argc, char*argv[])
    {
            char word[80];
            char str[80],
                 args[80][80];
            int counter = 0,
                a = 0,
                i = 0,
                index = 0,
                t = 0;
            while(str[a] != '\0')
            {
                    if(str[a] == ' ')
                    {
                            args[index][i] = '\0';
                            i = 0;
                            a++;
                            index ++;
                            counter ++;
                    }
                    args[index][i++] = str[a++];
            }
            args[index][i] = '\0';
            counter = counter + 1;
            printf("\nThe verbs were: ");
            int verbposition= -1;
         int size = 637;
            while(t<counter)
            {
                    strcpy(word, args[t]);
                    verbposition = binary_search(word, verbs, size);

                    if(verbposition > -1)
                            printf("%s", args[t]);

                    t++;

            }

            return 0;
    }

    int
    binary_search(char word[], char &verbs[][], int size)
    {
            int bottom = 0,
      top = size - 1,
                found = 0,
                middle;
            while(bottom <= top && !found)
            {
                    middle = (bottom + top) / 2;

                    if(strcmp(word, verbs[middle]))
                    {
                            found = 1;
                            return = middle;
                    }
                    if(strcmp(word, verbs[middle]) > 0)
                    {
                            top = middle - 1;
                    }
                    else
                            bottom = middle + 1;   
     }
            return -1;
    }
4

1 回答 1

0

你在正确的轨道上。我强烈建议您使用打印语句,因为您会清楚地知道哪里出错了。

于 2013-05-25T02:05:43.460 回答