c - 在字符串中查找动词

标签 c pointers user-defined-functions binary-search

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

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

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

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

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

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

另请注意,词典的动词数组有 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;
    }

最佳答案

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

关于c - 在字符串中查找动词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16743331/

相关文章:

python - 我如何告诉 Pig PyObject 是什么?

sql - BigQuery 无法保存使用函数的 View

C 给变量加上负号而不给它赋值

c - 条件表达式中的指针/整数类型不匹配

无法重新分配双指针动态内存

C++ STL 容器和指针有效性

arrays - Swift 并行性 : Array vs UnsafeMutablePointer in GCD

c++ - 确定调用 Excel UDF 的实际参数

c - 将 fgets 与数组指针结合使用

pointers - &deployment 如何满足 kubernetes 代码中的 runtime.Object 类型?