2016-05-16 3 views
0

私は現在の文字列に一致するように、このコードを使用しています:C++入力と同じ相対位置の文字列をどのように一致させることができますか?

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"などと一致します。これは、同じ相対位置の入力を含む文字列と一致するようにあなたはその後、

std::string needle; 

を持っている場合は、それが唯一の "ハイ" と

+0

'if(wordQueue.top()。key.find(a)== 0)'? – immibis

答えて

0

"ハイ" と一致します。たとえば、

needle.size() 

needleの文字数です。

size()メソッドに精通していない場合は、C++の任意の書籍のどこかで説明する必要があります。

あなたはその後、その後、

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

std::string haystack; 

haystackからあなたの最初のneedle.size()文字を与えている場合。

substr()メソッドに精通していない場合は、C++のマニュアルのどこかで説明してください。したがって

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

が真である場合、haystackの初期内容はneedle年代と同じです。したがって、needleに「hi」が含まれている場合は、haystackに「高」または「高」が含まれていて「これ」は含まれていない場合は、haystackにあります。

これで、特定の針柄の針を探すためにコードを変更する必要があります。

0

あなたが実際に以下の1の意味「文字列はAが同じ相対的順序で文字列Bに一致する」と言う:

  1. AがB
  2. Bの接頭辞では
  3. の接頭辞であります

ので、あなたと比較する必要があります:実際に長さ0まで比較

strcmp(A, B, min(strlen(A), strlen(B)) 

最も短いもの

0

compare()メソッドを試すことができます。一致する間隔を入力aの長さに制限することができます。 compare()は一致すると0を返します。

if (wordQueue.top().key.compare(0, a.length(), a) == 0) ... 
関連する問題