假设我们有以下方法(它是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中翻译这段代码 所以我们有两个字符串文字? 喜欢“我喜欢电脑这很重要” 和啪啪的字符串“电脑很非常”? 谁能解释一下我们有什么而不是炭?
答案 0 :(得分:3)
我不确定您究竟在问什么,但如果您想在pattern
中找到text
,那么strstr(text, pattern)
。或者,如果您只想比较text
和pattern
,那么strcmp(text, pattern)
(请注意,当0
和text
相等时,它会返回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)
我认为您对char
和char *
之间的区别感到困惑。在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 );
这是比较字符串的最佳和更安全的方式,但当然您需要知道它们的长度,或者至少它们之间的最小长度。