【问题标题】:Binary Search with character arrays?使用字符数组进行二进制搜索?
【发布时间】:2013-05-22 18:40:43
【问题描述】:

我在理解如何使用字符串进行二进制搜索时遇到了一些麻烦。我输入的是命令行提示符中的一个句子,它是 argv[1],(argv[0] 是我输出的可执行文件的名称)。看起来是这样的:

./a.out "This is my sentence."

在我的文件中还包含一个 .h 文件,其中包含两个数组——一个包含某些名词集合的名词数组和一个包含某些动词集合的动词数组。我想要做的只是检查 argv[1] 中的动词和名词是否在名词或动词数组中,我想将它们打印出来。但是,我无法理解如何解析句子中的每个单词,如上所示,并将它们与动词或名词数组进行比较,因为 C 中没有字符串(与 C++ 相对)。任何人都可以提供算法/伪代码或如何做到这一点的想法吗?如果是这样,那将非常感激!

【问题讨论】:

  • 它必须排序你知道的。
  • c 字符串使用strcmp()strncmp() 进行比较。

标签: c command-line-arguments binary-search arrays


【解决方案1】:

是的,正如前面提到的,名词和动词数组需要排序才能正常工作。 strcmp() 将返回 -1(或更少)、0 或 1(或更多),具体取决于左侧参数是否小于、等于或大于右侧参数。

想不出比 Wikipedia 更好的算法了,它甚至是用 C 语言编写的。当然,您需要稍微调整一下以适应您的目的。

祝你好运。

【讨论】:

    【解决方案2】:

    C 中的字符串是以 NULL(字节值 0)字符结尾的字符数组。

    您可以使用 char[] 或 char* 来引用“字符串”。

    使用指向每次递增的输入字符串的指针循环。虽然字符不是空格,但将其添加到某个缓冲区。如果字符是空格,则将 NULL 添加到缓冲区(C 字符串以空结尾)并将缓冲区用作二进制搜索算法的输入,该算法将使用 strcmp 比较字符串。清除缓冲区并重复,直到找到 NULL 字符。

    下面是一些将输入解析为单词的代码:

    int main(int argc, char* argv[])
    {
        char *p = argv[1];
        char buffer[100]; //assuming no words > 100 characters
    
        int count = 0;
    
        while(buffer[count++] = *p++)
        {
            if(*p == ' ' || *p == 0)
            {
                buffer[count] = 0;
                printf("Word: %s\n", buffer);
    
                //do something with buffer
    
                for(int i=0; i<count; i++) //clear the buffer
                    buffer[i] = 0;
                count = 0;
            }
        }
    
        return 0;
    }
    

    【讨论】:

    • 谢谢!我真的很感激代码。我最终没有使用它,但你的解释(我忘记使用空终止字符)非常有帮助,我想通了。
    猜你喜欢
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多