【问题标题】:How to compare two char* variables如何比较两个 char* 变量
【发布时间】:2010-05-14 19:15:49
【问题描述】:

假设我们有以下方法(在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 所以我们有两个字符串文本? 比如“我喜欢电脑,这很重要” 和模式字符串“计算机非常”? 谁能解释一下我们有什么而不​​是char?

【问题讨论】:

  • 很难理解你在问什么,你能改写一下吗?
  • char 方面的子字符串问题,或者我们应该找到文本是否包含几乎模式并且文本和模式不是字符串,它们是 char
  • 它们不是 char,它们是指向 char 的指针,这就是 C 中的“字符串”(即以 NUL 字符结尾的字符数组)。
  • 有点呼应之前的陈述——如果提供的答案可以帮助您解决问题,那么在 Stack Overflow 上接受一个可以帮助您解决问题的答案,并为帮助您解决问题的答案投票,这被认为是一种礼貌和良好的形式,即使他们没有直接解决您的问题。
  • 您应该指定Java OR C,因为两者之间的字符串处理非常不同。例如,Java 有一个 String 类,而 C 没有。

标签: java c algorithm


【解决方案1】:

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

根据 cmets 中的讨论进行编辑: 如果您想问如何在 Java 中实现单个字符的索引,则将(在 Java 中)text.charAt(i) 替换为 C text[i]。在 C 中,字符串中的字符可以像数组一样直接索引,在 Java 中需要调用 String 中的正确方法。

编辑 2:C 代码 const char * 在 Java 中可以替换为 String

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

【讨论】:

  • @davit-datuashvili:嗯,维基百科页面已经包含该算法的 C 实现。您是否对该代码的某些方面感到困惑?如果是这样,请编辑您的问题以具体询问(并从那里链接到维基百科页面)。
  • 我打算在java中实现这个怎么写? R = malloc((k+1) * sizeof *R); ?
  • 请将其编辑到顶部的实际问题中;正如你所看到的,大多数人试图回答你并不知道你真正想问的是什么。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    你可以试试这些:

    【讨论】:

      【解决方案4】:

      您可能需要strcmp()strpos()

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

        • if (pattern[0] == '\0') 这意味着 pattern.length==0 是吗?因为它在代码的开头
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-27
        • 2016-06-30
        相关资源
        最近更新 更多