我在理解如何使用字符串进行二分查找时遇到了一些困难。我输入的是命令行提示符中的一句话,即 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/