我正在尝试(并且遇到麻烦)编写一个程序(在 C 中),它在命令行中接受一个字符串(例如 $ test.out "This is a string")并通过字符串查找动词(和名词,但如果我能认出动词,我就可以自己做名词了)。
文件 lexicon.h 中给出了按字母顺序排序的动词列表,这是我应该用作字典的内容。
我知道如何从命令行接受字符串并使用该输入创建一个字符串数组,每个字符串本身都是一个单独的单词,我已经有一个可以做到这一点的工作程序,我希望使用其中的一部分对于这个。
我应该创建一个名为 binary_search(...stuffgoeshere...) 的函数并使用它来搜索词典文件并找到动词。
我想要一些关于如何创建一个函数 (binary_search) 的建议或指导,该函数可以检查一个已经分隔的单词是否与 lexicon.h 列表中的任何单词匹配。我不希望有人只写一个答案,我想知道你为什么建议你做什么。希望我能从中学到一些有趣的东西!
我知道这很混乱,但这就是我到目前为止所拥有的。
另请注意,lexicon 的动词数组有 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;
}