二进制搜索字符数组?

我在理解如何使用字符串进行二进制搜索方面遇到了一些麻烦。 我输入的是命令行提示符中的一个句子,即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 

是的,正如已经提到的那样,名词和动词数组需要进行排序才能实现。 strcmp()将返回-1(或更小),0或1(或更多),具体取决于左参数是小于,等于还是大于右参数。

无法想象一个算法比维基百科更好的地方,它甚至用C语言编写。当然,你需要根据自己的需要调整它。

祝好运。