您好我正在尝试制作一个计算器,用户将练习(放入一个字符串)并转移到乘法除法加法和减法的四个函数中,我的函数已经准备就绪,但我有两个主要问题需要我你的帮助。
所以这是我的第一个问题是,当我把我的函数(char函数)我的程序崩溃但是当我运行相同的函数(在主函数中)时,它没有问题。所以我很想知道为什么会这样,以及如何解决它。
第二个问题是如何让所有功能让自己多次(递归),所以如果你能帮助我做一个功能来做到这一点,我很感激。
另一个小问题如果你可以帮助我并让函数将原始字符串返回(返回)到下一个函数,我会很高兴。
我的代码 -
#include <stdio.h>
#include <string.h>
char multiplication(char str[]);
int main()
{
char str[99] = "3-5+5*7";
multiplication(str);
return(0);
}
char multiplication(char str[])
{
char strp[99];
char str1[99] = {0};
char str2[99];
char mul[99] = "*";
char old[99];
char *rev;
int i, k, j = 0, aPos, zPos, len;
int sum,sum1,sum2;
static char buffer[4096];
char *p;
len = strlen(str);
strcpy (strp, str);
aPos = zPos = -1;
for(i =0; i<len; i++)
{
if(str[i] == '+' )
{
aPos = i;
}
else if(str[i] == '*')
{
zPos = i;
break;
}
}
if(aPos != -1 && zPos != -1)
{
for(k=0, i=zPos-1;i>aPos;--i,++k)
{
str1[k]=str[i];
}
}
rev = strrev(str1);
for(i = 0; i<10; i++)
{
if(strp[i] == '*')
{
while(strp[i+1] != '+' || '\0')
{
str2[j++] = strp[++i];
}
}
}
old[0] = '\0';
strcat(old,str1);
strcat(old,mul);
strcat(old,str2);
sum1 = atoi (str1);
sum2 = atoi (str2);
sum = sum1 * sum2;
str2[j] = '\0';
sprintf(str2,"%d",sum);
if(!(p = strstr(str, old)))
printf("%s",str);
strncpy(buffer, str, p-str); // Copy characters from 'str' to the new string
buffer[p-str] = '\0';
sprintf(buffer+(p-str), "%s%s", str2, p+strlen(old));
printf("%s",buffer);
}
感谢任何可以帮助我的人,我非常感激
答案 0 :(得分:0)
此问题的最佳方法通常是将Shunting Yard Algorithim转换为infix notation的Reverse Polish Notation。我想你会发现this blog有助于理解分流码算法的一些实现来创建这种求解器。我还建议您阅读shunting yard algorithm和RPN上的维基百科页面。
使用这些资源,您会发现将infix notation转换为RPN的最有效方法是使用shunting yard algorithm。然后,在代码中评估您的RPN等式(使用堆栈数据结构......继续阅读)是微不足道的。为了完成所有这些,我建议您了解stack data structure及其在C / C ++中的实现检查this implementation of a stack at cprogramming.com,this implementation from the cs department at MIT和this implementation from the cs department at Boston University。
cprogramming.com reference更像是C ++实现,因为它使用模板。如果您只想要代码,请查看link from MIT。