1

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

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

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

4

2 回答 2

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;
}
于 2013-05-27T22:12:31.463 回答
1

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

想不出比Wikipedia更适合算法的地方了,它甚至是用 C 语言编写的。当然,您需要根据自己的目的对其进行一些调整。

祝你好运。

于 2013-05-28T01:30:09.120 回答