我正在做一些字符串操作,並通過我一個字符串迭代一個字符串循環,並在一定條件下插入字符到串。下面是代碼:C++:字符串::插入(字符串:迭代_where,焦炭_CH)突然不工作
string * const Expression::process(char * const s)
{
if(s == NULL)
{
printf("(from Expression::process())\n > NULL data");
return NULL;
}
string *rtrn = new string(s);
string garbage;
//EDIT
rtrn->erase(remove(rtrn->begin(), rtrn->end(), ' '), rtrn->end());
for(string::iterator j = rtrn->begin(); (j+2) != rtrn->end(); j++)
{
if(Operator::isValid(&*j, garbage) != Operator::SYM && *(j+1) == '-' && (Operator::isValid(&(*(j+2)), garbage) != Operator::INVALID))
rtrn->replace(j+1, j+2, "+-");
}
rtrn->insert(rtrn->begin(), '(');
rtrn->append(")");
for(string::iterator k = rtrn->begin(); k+1 != rtrn->end(); k++)
{
if(*k == '-' && !Operator::isValidNum(*(k+1)))
rtrn->replace(k, k+1, "-1*");
if((Operator::isValid(&*(k+1), garbage) != Operator::INVALID && (Operator::isValid(&*(k+1), garbage) != Operator::SYM || *(k+1)=='(')) &&
(Operator::isValid(&*k, garbage) == Operator::VAR || Operator::isValidNum(*k) || *k==')') &&
!(Operator::isValid(&*k, garbage) == Operator::NUM && Operator::isValid(&*(k+1), garbage) == Operator::NUM))
{
if(Operator::isValid(&*k, garbage) == Operator::SYM)
{
if(opSymb::valid[garbage]->getArguments())
rtrn->insert(k+1, '*');
}
else
{
rtrn->insert(k+1, '*');
}
}
}
return rtrn;
}
當s
等於 「20倍(5X + 3)-6x(5X^2 + 11/2)」,我得到rtrn->insert(k+1, '*');
else語句下運行時錯誤時,它在字符串中獲得「5x^2」。基本上,它使6個插入時,它崩潰我和抱怨迭代+運營商不超出範圍。雖然,當我在調試時,它確實傳遞了正確的偏移量。它成功地將字符插入到字符串中,但在函數執行後,迭代器指向損壞的數據。
您的擦除循環應該是對'std :: remove'(使用擦除刪除成語,當然)的調用。 – chris
突然不工作,經常出現同一類「巧合工作」的問題。 –
擦除不是問題。 – bathtub