0

好的,这就是我想要完成的。

首先,下表只是我创建的一个示例,在我的作业中,我不应该知道其中任何一个。这意味着我不知道他们会通过什么以及每个字符串的长度是多少。

我正在尝试完成一项任务是能够比较字符串的一部分

   //In Array `phrase`       // in array `word`
   "Backdoor",        0        "mark"         3 (matches "Market")
   "DVD",             1        "of"           2 (matches "Get off")
   "Get off",         2        ""            -1 (no match)
   "Market",          3        "VD"           1 (matches "DVD")

因此,您可以从左侧的上述代码中看到一组数组,我将它们存储在我的班级中,它们最多有 10 个单词

这是类定义。

class data
{
    char phrase[10][40];
public:
    int match(const char word[ ]);
};

所以我使用成员函数来访问这些私有数据。

int data::match(const char word[ ])
{
    int n,
    const int wordLength = strlen(word);

    for (n=0 ; n <= 10; n++)
    {
        if (strncmp (phrase[n],word,wordLength) == 0)
        {
            return n;
        }
    }

    return -1;
}

我试图使其工作的上述代码是它应该匹配并且如果它找到匹配则返回n如果没有找到则返回索引应该总是返回-1

现在发生的事情总是回报10

4

2 回答 2

1

你快到了,但你的代码不完整,所以我在一些事情上摸不着头脑。

您可能有一个太多的变量来表示一个索引。除非ni不同,否则您应该只使用一个。也尝试使用更具描述性的名称,pos似乎代表您正在搜索的文本的长度。

for (n=0 ; n <= searchLength ; n++)

由于word从不改变的长度,你不需要strlen每次都打电话。在for循环之前创建一个变量来存储长度。

const int wordLength = strlen(word);    

我假设您正在搜索的文本存储在一个char数组中。这意味着您需要将指针传递给存储在的第一个元素n

if (strncmp (&phrase[n],word,wordLength) == 0)

最后,您会得到如下所示的内容:

char word[256] = "there";
char phrase[256] = "hello there hippie!";

const int wordLength = strlen(word);    
const int searchLength = strlen(phrase);

for (int n = 0; n <= searchLength; n++)
{
    // or phrase + n
    if (strncmp(&phrase[n], word, wordLength) == 0)
    {
        return n;
    }
}

return -1;

注意:最后一个示例现在已经完成,可以返回匹配项了。

于 2012-06-11T00:38:53.940 回答
0

I'm puzzled about your problem. There are some cases unclear. For eaxmple

abcdefg --- abcde     Match "abcde"?
how many words match? any other examples,
abcdefg --- dcb     Match "c"?
and
abcdefg --- aoodeoofoo     Match "a" or "adef"?
if you want to find the first matched word, it's OK and very simple. But if you are to find the longest and discontinuous string, it is a big question. I think you should have a research about LCS problem (Longest Common Subsequence)

于 2012-06-11T00:50:42.977 回答