Возможно, лучше сказать, что я делаю что-то неправильно, а потом говорю, что сравнение не работает. Но я уже давно перебираю этот код.C++ char сравнение не работает
У меня есть рекурсивная функция. Большинство из них работает хорошо, так что я буду только положить ту часть, которая не работает:
//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;
}
}
Сравнение, что не работает это код [я] [0] == startNT. Ну ... я должен сказать, не работает в 100% случаев. Он отлично работает до половины пути через рекурсивную функцию, код [i] [0] становится «S», а startNT становится «T» (после того, как он уже доказывает, что он может правильно сравнивать «S» и «T» где-то во время разговора) и он по-прежнему оценивает значение true, что вызывает разрыв wkString.replace(), поскольку он не может найти «T».
Прошло некоторое время с тех пор, как я использовал C++, поэтому я, вероятно, делаю глупую ошибку. Спасибо за любую помощь.
Использование 'std :: vector' вместо массива является хорошей идеей в большинстве случаев. – bitmask
Я просто использую векторы, чтобы это сделать, спасибо за помощь. Но только для справки в будущем, нет ли способа, чтобы класс содержал массив неизвестного размера, который скопирует размер из переданного массива? – Taylor
Когда вы передаете такой массив, он даже не знает его размера, поэтому нет, вы не можете использовать его размер ни для чего. Это одна из причин, по которой никогда не использовать необработанные массивы в C++. Вместо этого используйте вектор или std :: array. Std :: array ведет себя так, как если бы они были лучше разработаны. – bames53