【发布时间】:2020-07-08 10:18:21
【问题描述】:
我想写一个以字符串为输入的 C 函数。
示例用户输入:
"(1+2-3+(4+5))-7)"
所需的输出是 2 作为整数。基本上我必须删除"("")" 空格并计算加法和减法运算。
【问题讨论】:
-
你应该设计一个机器状态来解析字符串并考虑优先级。
-
你的表达式多了一个
):2个(和3个)
标签: c calculator
我想写一个以字符串为输入的 C 函数。
示例用户输入:
"(1+2-3+(4+5))-7)"
所需的输出是 2 作为整数。基本上我必须删除"("")" 空格并计算加法和减法运算。
【问题讨论】:
):2个(和3个)
标签: c calculator
如果你想从头开始,你必须解析你的输入以获得查找优先级,并转换 number(int) 中的每个数字(string) 以进行计算。您可以使用 atoi 将字符串数字转换为 int 数字。
示例:
#include <stdio.h>
void add ();
void sub ();
void mul ();
void div ();
void sqr ();
void prime_factorization ();
void factorial ();
void sel_func (int);
int main (void)
{
int s;
Input:
printf("Input a number [ +(1), -(2), *(3), /(4), ^(5), prime factorization(6), !(7)] : ");
scanf("%d",&s);
if (s > 7 | s < 1){
printf("Please input again\n");
goto Input;
}
sel_func (s);
goto Input;
}
void sel_func (int s)
{
void (*fptr)(void);
switch (s){
case 1:
fptr = add;
break;
case 2:
fptr = sub;
break;
case 3:
fptr = mul;
break;
case 4:
fptr = div;
break;
case 5:
fptr = sqr;
break;
case 6:
fptr = prime_factorization;
break;
case 7:
fptr = factorial;
break;
}
fptr();
}
void add ()
{
int a, b;
printf("Input two numbers : ");
scanf("%d%d", &a,&b);
printf("Result = %d\n", a + b);
}
void sub ()
{
int a, b;
printf("Input two numbers : ");
scanf("%d%d", &a,&b);
printf("Result = %d\n" , a - b);
}
void mul ()
{
int a, b;
printf("Input two numbers : ");
scanf("%d%d", &a,&b);
printf("Result = %d\n", a * b);
}
void div ()
{
int a, b;
printf("Input two numbers : ");
scanf("%d%d", &a,&b);
printf("Result = %d\n", a / b);
}
void sqr (){
int exp, base, i;
int result = 1;
printf("Input base : ");
scanf("%d",&base);
printf("Input exp : ");
scanf("%d",&exp);
for (i = 0; i < exp; ++i)
result *= base;
printf("%d^%d = %d\n",
base,exp,result);
}
void prime_factorization ()
{
int n;
while (1){
printf("Input a number : ");
scanf("%d",&n);
if(n < 2)
return;
}
int p = 2;
int primes[20];
int index = 0;
int i;
while (1 != n){
if (0 == (n%p)){
n = n/p;
primes[index] = p;
++index;
p = 2;
} else {
++p;
}
}
if(1 == index){
printf("Prime number\n");
} else {
for (i = 0; i < index - 1; ++i)
printf("%d*", primes[i]);
printf("%d\n", primes[i]);
}
return;
}
void factorial ()
{
int a, b;
int sum = 1;
printf("Input a number : ");
scanf("%d", &b);
for (a = 1; a <= b; ++a)
sum *= a;
printf("%d!=%d\n",b,sum);
}
【讨论】: