2012-02-23 8 views
-1

string1が文字列2から文字を取り出し、正しい順序で入れているかどうかをチェックしたい。それを行う最も効果的な方法は何でしょうか?以下に示すように他の文字列内の文字から文字列を作ることができるかどうかを調べる

たとえば、私は2つの文字列を持っている:あなたが見ることができる

string s1 = "ABCDASFSADFAF", s2 ="ABCDFGSAGSRASFSFASFASDADFAFDSAGFAS"; 

として、我々は、文字列s2内の文字から文字列S1を作ることができるので、string1がstring2の中に存在しています。だから基本的には、文字列s1を文字列s2から作ることができるかどうかを調べる必要があります。そのようなことをする最も効果的な方法は何でしょうか?私は考えを持ってループを通過し、各文字が文字列内に何回あるかを確認し、次に2番目の文字列で同じことをして、配列と格納された情報を比較し、文字列s2文字配列がそれ以上s1の配列文字列を文字列に変換すると、s2をs2から作ることができます。

ああ、プログラミング言語はC++です。

答えて

0

あなたはS1をループとs2のコピーから各文字の最初の発見を除去することによって、これを確認することができます。

#include <string.h> 

using namespace std; 

string s1 = "ABCC", s2 = "DCBA"; 

string copy = s2; 
size_t found; 
bool contains = true; 

for(int i = 0; i < s1.length(); i++) 
{ 
    found = copy.find(s1[i]); 
    if(found == string::npos) 
    { 
     contains = false; 
     break; 
    } 
    copy = copy.replace(found, 1, ""); 
} 

// Now 'contains' is true if s1 can be made from s2, false if it can't. 
// If also 'copy' is empty, s1 is an anagram of s2. 
3

ソート各文字列(std::sort)、その後std::includesを使用しています。

関連する問題