运算字符串解析(c语言)

运算字符的解析,如:43+表示:4+3, 25* 表示:2*5, 25*1+表示(2*5)+1,435/+表示:4 +(3/5)

 1 #include <stdio.h>
 2 #include <stdbool.h>
 3 #include <string.h>
 4 
 5 bool isNumber(const char *c);
 6 int getNumber(const char *c);
 7 bool isOperator(const char *c);
 8 float calculate(char *string, int len);
 9 
10 int main(int argc, const char * argv[])
11 {
12 
13     // insert code here...
14     printf("Begin>>\n");
15     printf("%d",'0');
16     printf("%d\n",'/');
17     char string[100] = "435/+";
18     size_t len = strlen(string);
19     float ret = calculate(string, (int)len);
20     printf("result = %f\n", ret);
21     return 0;
22 }
23 
24 bool isNumber(const char *c)
25 {
26     if ( (int)(*c) >= (int)('0') && (int)(*c) <= (int)('9')) {
27         return true;
28     }
29     return false;
30 }
31 
32 int getNumber(const char *c)
33 {
34     bool isN = isNumber(c);
35     if (isN) {
36         int n = (int)((*c) - (int)'0');
37         return n;
38     }else {
39         return 0;
40     }
41 }
42 
43 bool isOperator(const char *c)
44 {
45     if ((int)(*c) == (int)'+' || (int)(*c) == (int)'-' || (int)(*c) == (int)('*') || (int)(*c) == (int)('/') ) {
46         return true;
47     } else {
48         return false;
49     }
50     
51 }
52 
53 float calculate(char *string, int len)
54 {
55     if (len == 1) {
56         return (float)getNumber(string);
57     }
58     
59     if (len == 2) {
60         printf("error!");
61     }
62     
63     if (!isOperator(string + len - 1)) {
64         return 0.0f;
65     }
66     
67     float a = 0.0f;
68     float b = 0.0f;
69     if (isOperator(string + len - 1 -1)) {
70         a = (float)getNumber(string);
71         b = calculate(string + 1, len - 2);
72     } else {
73         a = calculate(string, len - 2);
74         b = (float)getNumber(string + len - 1 - 1);
75     }
76     
77     char operator = *(string + len - 1);
78     if ((int)operator == (int)'+') {
79         return (a + b);
80     } else if ((int)operator == (int)'-') {
81         return (a - b);
82     } else if ((int)operator == (int)'*') {
83         return (a * b);
84     } else if ((int)operator == (int)'/') {
85         return (a / b);
86     } else {
87         return 0.0f;
88     }
89     
90 }

 

转载于:https://www.cnblogs.com/huangzizhu/p/3749832.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值