私は間違ったことをしているとは言えません。しかし、私はこのコードをもう少し先に進めてきました。C++の文字の比較が機能しない
私は再帰関数を持っています。それのほとんどはうまく機能しているので、私だけで動作していない部分を配置します:
//In main
string C[] = {"S=>bS",
"S=>aaT",
"T=>aT",
"T=>bU",
"U=>Ua",
"U=>aa"};
CFG CFG1(C);
...
string *code;
char startNT;
//The CFG constructor
CFG::CFG(string C[])
{
code = C;
startNT = code[0][0];
}
...
//Inside of processData recursive function
for(unsigned int i = 0; i < code->size(); i++)
{
if(code[i][0] == startNT)
{
string newStr = code[i].substr(code[i].find(">")+1);
string old = wkString;
//This is the recursive call
if(processData(inString, wkString.replace(wkString.find_first_of(startNT), wkString.find_first_of(startNT)+1, newStr)))
{
return true;
}
cout << wkString << endl;
wkString = old;
}
}
動作していない比較[i]が[0] == startNTコードです。まあ...私は言わなければならない、時間の100%働いていない。コード[i] [0]は 'S'になり、startNTは 'T'になります(呼び出し中に 'S'と 'T'を適切に比較できることを既に証明した後)。それはまだ 'true'と評価され、wkString.replace()は 'T'を見つけることができないので中断します。
私はC++を使用して以来、しばらくしているので、おそらく愚かな間違いをしています。助けてくれてありがとう。
ほとんどの場合、配列の代わりに 'std :: vector'を使うのは良い考えです。 – bitmask
私はこれを行うためにベクトルを使用します。助けてくれてありがとう。しかし、将来の参照のために、渡された配列からサイズをコピーする未知のサイズの配列をクラスに含める方法はありませんか? – Taylor
あなたがそのようなサイズを知っていないような配列を渡すと、そうでないので、あなたは何のためにもそのサイズを使うことができません。これは、C++で生の配列を使用しない理由の1つです。代わりにvectorまたはstd :: arrayを使用してください。 Std :: arrayは、よりうまく設計されていれば、生の配列のやり方を振る舞います。 – bames53