我目前正在使用此代码来匹配字符串:
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”
答案 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;你实际上是指以下其中一个:
因此你应该与:
进行比较strcmp(A, B, min(strlen(A), strlen(B) )
实际上比较了最短的长度
答案 2 :(得分:0)
可以尝试compare()方法。您可以将匹配间隔限制为输入a
的长度。 compare()为匹配返回0。
if (wordQueue.top().key.compare(0, a.length(), a) == 0) ...