如何比较两个char *变量

时间:2010-05-14 19:15:50

标签: java c algorithm

假设我们有以下方法(它是c代码):

const char *bitap_search(const char *text, const char *pattern)

我的问题是,如果它们是char,我如何比较文字和图案?这个方法就像一个子字符串问题,但我有点困惑,我可以写char这样的代码吗? if (text[i]==pattern[i])? 看起来我对java中的这个算法感兴趣 http://en.wikipedia.org/wiki/Bitap_algorithm 如何在java中实现这个?

R = malloc((k+1) * sizeof *R);

请帮我在java中翻译这段代码   所以我们有两个字符串文字?  喜欢“我喜欢电脑这很重要”   和啪啪的字符串“电脑很非常”? 谁能解释一下我们有什么而不​​是炭?

5 个答案:

答案 0 :(得分:3)

我不确定您究竟在问什么,但如果您想在pattern中找到text,那么strstr(text, pattern)。或者,如果您只想比较textpattern,那么strcmp(text, pattern)(请注意,当0text相等时,它会返回pattern

根据评论中的讨论进行编辑:如果您想询问如何在Java中实现单个字符的索引,那么用text.charAt(i)代替C {{1 }}。在C中,字符串中的字符可以像数组一样直接索引,在Java中,需要在String中调用正确的方法。

编辑2 :可以使用text[i]在Java中替换C代码const char *

在C String中用于分配内存;在这种情况下,它为malloc元素在数组R中分配空间。因此,可以移除m+1并将BIT *R替换为R = malloc((m+1) * sizeof *R);。将值分配到数组boolean[] R = new boolean[m + 1];时,将R替换为true,将1替换为false

答案 1 :(得分:2)

我认为您对charchar *之间的区别感到困惑。在C中没有内置字符串类型。字符串表示为以null结尾的字符数组,这意味着字符串的最后一个字符必须是\0所以char是单个字符,而char *是指向字符数组的指针, 一世。即一个字符串。这意味着说if (text[i] == pattern[i])是完全可以的。

答案 2 :(得分:2)

你可以试试这些:

  • Google-diff-match-patch说明了这一点 有 a Bitap的java实现。

  • 此外,它似乎是crosswire has an implementation

  • 最后,那里 似乎是一个名为字符串的软件包 搜索,标题是 高性能模式匹配 Java中的算法

答案 3 :(得分:0)

您可能需要strcmp()strpos()

答案 4 :(得分:0)

您应该使用strncmp()。语法类似于:

int strncmp( const char *str1, const char *str2, size_t count );

这是比较字符串的最佳和更安全的方式,但当然您需要知道它们的长度,或者至少它们之间的最小长度。