C ++如何匹配具有相同输入相对位置的字符串?

时间:2016-05-16 02:02:36

标签: c++ find match

我目前正在使用此代码来匹配字符串:

priority_queue<TreeNode> wordQueue; // declaration of wordQueue

struct TreeNode {  //declaration of TreeNode
    string key;
    int data;
};

if (wordQueue.top().key.find(a) != string::npos){  //a is a string input from the user
    inputMatches.push_back(wordQueue.top());
}

代码在队列中搜索与输入匹配的任何字符串。它确实匹配。但是它匹配包含输入的队列中的任何字符串。例如输入“hi”它会匹配“hi”,“this”,“high”,“thigh”等。我怎样才能使它匹配包含输入的字符串在相同的相对位置,所以对于上面的例如,它只匹配“hi”和“high”

3 个答案:

答案 0 :(得分:0)

如果你有

std::string needle;

然后,

needle.size()

needle中的字符数。

如果您不熟悉size()方法,则应在任何有关C ++的书籍中的某处解释。

如果你有

std::string haystack;

然后

haystack.substr(0, needle.size());

为您提供needle.size()中的初始haystack字符。

如果您不熟悉substr()方法,则应在任何有关C ++的书籍中的某处解释。

因此:

if (haystack.substr(0, needle.size()) == needle)

为真,那么haystack的初始内容与needle相同。因此,在您的情况下,如果needle包含&#34; hi&#34;,如果haystack包含&#34;高&#34;它会在haystack中找到它。 ,或者&#34; hi&#34;,但不是&#34;这&#34;。

现在,您应该清楚如何更改自己的代码以查找特定大海捞针中的特定针头。

答案 1 :(得分:0)

当你说&#34;字符串A以相同的相对顺序匹配字符串B&#34;你实际上是指以下其中一个:

  1. A是B
  2. 的前缀
  3. B是A
  4. 的前缀

    因此你应该与:

    进行比较
    strcmp(A, B, min(strlen(A), strlen(B) )
    

    实际上比较了最短的长度

答案 2 :(得分:0)

可以尝试compare()方法。您可以将匹配间隔限制为输入a的长度。 compare()为匹配返回0。

if (wordQueue.top().key.compare(0, a.length(), a) == 0) ...