c - 使用字符数组进行二进制搜索?

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

我在理解如何使用字符串进行二分查找时遇到了一些困难。我输入的是命令行提示符中的一句话,即 argv[1],(argv[0] 是我输出的可执行文件的名称)。这是它的样子:

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

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

最佳答案

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;
}

关于c - 使用字符数组进行二进制搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16781105/

相关文章:

algorithm - 使用二进制搜索查找多个条目

c - SPI_I2S_ReceiveData 始终返回 0xff 或 0x00

c - 将 getcwd 存储在函数的结构上

mysql - mysqldump 文件去哪里?

java - 命令行参数 javafx

python - 返回列表中给定数字之前的数字

c - 将 execvpe 的输出传递到 C 中的字符串中

c - 函数cvShowImage使程序崩溃。为什么?开放式CV

c - 执行C程序时如何传递文件名

java - binarySort 方法未返回正确项目的问题