我剛剛意識到我編寫的程序存在一個主要缺陷。這是一個象徵性地區分數學函數的程序,例如"x^2+5"
- >"2*x"
,以及所涉及的主功能類似如何在可能的遞歸過程中設置緩衝區?
char * deriveFromTree (node * rt)
{
char * dfdx = malloc(100*sizeof(char)); // buffer
if (rt->op) // if rt is of the form rt = gx op hx
{
char * dgdx = deriveFromTree(rt->gx); // g'(x)
char * dhdx = deriveFromTree(rt->hx); // h'(x)
char thisop = *rt->op;
if (thisop == '+' || thisop == '-')
{
// ADDITION/SUBTRACTION RULE:
// dfdx = dgdx + thisop + dhdx
dfdx = strcat(dfdx, dgdx);
dfdx = strcat(dfdx, charToString(thisop));
dfdx = strcat(dfdx, dhdx);
}
開始起飛的問題,因爲你可能已經看到,是的deriveFromTree
結果符合長度100
的緩衝區,但結果也可以由其他幾個結果,這是不行的。另一種解決方案是擺脫緩衝區和設置dfdx
是它需要的精確長度:
char * deriveFromTree (node * rt)
{
char * dfdx;
if (rt->op) // if rt is of the form rt = gx op hx
{
char * dgdx = deriveFromTree(rt->gx); // g'(x)
char * dhdx = deriveFromTree(rt->hx); // h'(x)
char thisop = *rt->op;
if (thisop == '+' || thisop == '-')
{
// ADDITION/SUBTRACTION RULE:
// dfdx = dgdx + thisop + dhdx
dfdx = malloc(strlen(dgdx) + strlen(dhdx) + 2);
dfdx = strcat(dfdx, dgdx);
dfdx = strcat(dfdx, charToString(thisop));
dfdx = strcat(dfdx, dhdx);
}
但是,這是因爲電話strlen(dgdx)
和strlen(dhdx)
迭代通過串dgdx
和dhdx
然後低效他們在strcat
調用中再次迭代。
這個問題的最佳解決方案是什麼?
請避免標記C++,除非您的代碼是專門用C++編寫的。這顯然是純粹的C代碼。 – CoryKramer
使用'std :: string'和'+ =' –
定義一個數據結構 - 一種抽象 - 表示表達式並停止使用字符串。 – molbdnilo