c - 用字符串作为输入用c编写计算器程序
问题描述
我想编写一个以字符串为输入的 C 函数。
用户输入示例:
"(1+2-3+(4+5))-7)"
所需的输出2
为整数。基本上我必须删除"("")"
空格并计算加法和减法运算。
解决方案
如果你想从头开始,你必须解析你的输入以找到优先级,并转换 number(int) 中的每个数字(string) 以进行计算。您可以使用 转换 int number 中的字符串数字atoi
。
示例:
#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);
}
推荐阅读
- laravel - 预定命令更新记录
- python - 将分号分隔的字符串文本文件转换为列并在 Python 中执行排序?
- assembly - 从 NASM 到 MASM
- flutter - Flutter 嵌套小部件 setState 无法按预期工作
- firebase - firebase 在 jenkins 中部署,不知道在哪里使用由 firebase login 创建的令牌:ci
- powerbi - 根据日期切片器更改共享轴/层次结构
- c# - 使用实体框架从 Cosmos Db 获取子文档
- android - 如何强制媒体流调用流?
- azure-logic-apps - How to read azure service queue message in Logic apps?
- javascript - 如何在 jquery / ajax 调用中正确传递值