gpt4 book ai didi

c - 我想将一个函数拆分成两个函数

转载 作者:太空宇宙 更新时间:2023-11-04 08:07:24 24 4
gpt4 key购买 nike

我有一个获取表达式指针的函数,通过代码地址增加(expression++),我想把函数一分为二,因为它太长了,但我不得不使用指向指针的指针,并且我想我用错了,因为现在我的代码有一个无限循环。这是我想拆分的功能,然后是帮助功能:

char CalculateExpression(char *expression, char *LEFT, char *RIGHT){

int i,depth;

expression++;

if (Is_Digit(expression))
{
i=0;
while(Is_Digit(expression))
{
LEFT[i] = *expression;
i++;
expression++;
}
}

else
{

i=0;
LEFT [i] = *expression;
i++;
expression++;

depth = 1;
while(depth > 0)
{
if (*expression == '(') depth++;

if (*expression == ')') depth--;

LEFT[i] = *expression;
i++;
expression++;
}

}
LEFT[i] = 0;

char OPERATION = *expression;

expression++;


i=0;

while (*(expression+1))
{
RIGHT[i] = *expression;
i++;
expression++;
}

RIGHT[i] = 0;

return OPERATION;}

这里有两个帮助函数:

  bool Is_Digit(char *c)
{
return (*c >= '0' && *c <= '9');
}

bool Is_Num(char *exp)
{
while(*exp)
{
if (!Is_Digit(exp++)) return false;
}
return true;
}

这就是我所做的,我以这种方式在主函数中定义了一个指向指针的指针:

   bool calculate_modular_expression(unsigned int modulus, char* expression,
unsigned int* expression_result)
{

char** expression_after;
expression_after= &expression;
CalculateExpression(expression,Left_To_Operation,
Right_To_Operation,expression_after);

}

这就是我更改其他函数的方式(拆分后),新函数称为 Left_Operand:

int Left_Operand(char *LEFT, char *RIGHT,char** expression_after)
{
int i,depth;

if (Is_Digit(expression_after))
{
i=0;
while(Is_Digit(expression_after))
{
LEFT[i] = **expression_after;
i++;
expression_after++;
}
}

else
{

i=0;
LEFT [i] = **expression_after;
i++;
expression_after++;

depth = 1;
while(depth > 0)
{
if (**expression_after == '(') depth++;

if (**expression_after == ')') depth--;

LEFT[i] = **expression_after;
i++;
expression_after++;
}

}

LEFT[i] = 0;



}



char CalculateExpression(char *expression, char *LEFT, char *RIGHT,char** expression_after)
{
int i,depth;

expression++;


Left_Operand(LEFT,RIGHT,expression_after);


expression = *expression_after;

char OPERATION = *expression;

expression++;


i=0;

while (*(expression+1))
{
RIGHT[i] = *expression;
i++;
expression++;
}

RIGHT[i] = 0;

return OPERATION;
}

最后是更改后的帮助功能:

bool Is_Digit(char **c)
{
return (**c >= '0' && **c <= '9');
}


/*this char returns true if an expression is a number*/

bool Is_Num(char **exp)
{
while(**exp)
{
if (!Is_Digit(exp++)) return false;
}
return true;
}

我可能做错了什么?

最佳答案

您的 Is_Num 修改它获取的指针,而不是指针。要修改外部上下文中的指针,您需要执行如下操作:

bool Is_Num(char ** const p_exp)
{
while(**p_exp)
{
if (!Is_Digit((*p_exp)++)) return false;
}
return true;
}

将获得的指针标记为 const 也是一个好主意。它可以防止您修改它,从而确保您始终引用同一个对象。

关于c - 我想将一个函数拆分成两个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41846531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com