比较char数组

时间:2011-10-23 19:15:36

标签: c arrays char compare

如果我有一个字符数组,例如:

A = [w, o, r, n, g, , w, o, r, d]

另一个数组例如:

B = [c, o, r, r, e, c, t, , w, o, r, d, .]

我需要将数组A中的单词(由空格分隔)与数组B进行比较,如果第一个数组中的任何单词存在于第二个数组中,则应该打印该单词。因此,例如,由于“word”存在于第一个数组和第二个数组中,因此应该打印出“word”。

我该怎么做?

3 个答案:

答案 0 :(得分:4)

让我们看看我会怎么做:

你需要一个函数,给定一个char数组,将它分成一个单词数组(并将它们放在C字符串中,NUL请终止:-))。我会把这个数组的长度和数组放在struct

struct WordCollection
{
    size_t NumWords;
    char **Words;
}

现在......如何做这个功能?

假设我们“欺骗”了一点,并确定我们的数组AB是NUL终止的(或者如果它们.像B一样终止,那么你替换{{ 1}}与NUL)。现在,这是C,你应该首先计算字符串中的空格数,分配一个.char*)数组,其数量足以包含WordCollection::Words n + 1(和将此char*放入n + 1)并使用strtok“tokenize”字符串并将字词放入您创建的数组中。

然后您应该(可以)使用此函数将A和B数组拆分为单词。您将获得两个WordCollection::NumWords,A1和B1。

为了更快,我会qsort B1。

然后对于A1中的每个单词,你{B1}中的bsearch(它不是一个坏单词......它意味着二进制搜索,它是一种在有序数组中搜索内容的快速方法)

完成: - )

我要补充一点,如果这是您第一次使用WordCollectionbsearch,那么您最好查看可以找到的样本。他们的语法可能“棘手”。

现在......我知道你不会看代码:-)所以我会把它放在这里

qsort

ideone

答案 1 :(得分:1)

基本上你需要以某种方式分离单词,然后迭代组合。有一百种方法可以做到这一点 - 它只需要编程。

答案 2 :(得分:0)

您也可以这样做:

  1. 将集合A中的所有单词插入带有后缀“A”的集合C.你会得到=>
    worngA {
    {1}}

  2. 将集合B中的所有单词插入带有后缀“B”的集合C.你会得到=>
    wordA {
    {1}}

  3. 在集合C上运行排序算法,例如qsort。你会得到=>
    correctB {
    {1}} {
    {1}} {
    {1}}

  4. 在集合C中循环,直到它的大小为1。将wordBcorrectB进行比较 - 如果它们匹配除了最后一个字母 - 您发现重复并且可以将其打印出来。

  5. 我不知道这个算法的复杂性,但它显然应该比对所有单词组合的强力扫描更快: - )