- #include <stdio.h>
- #include <unistd.h>
- #include <stdlib.h>
- #include <string.h>
- /*****************************
- * 2 + 5
- * token[0][16] == '2'
- * token[1][16] == '+'
- * token[2][16] == '5'
- * **************************/
- int len;
- char token[64][16];
- void build_token(char *s)
- {
- int i = 0;
- int j = 0;
- char * p = s;
- for (i = 0; i < 64; i++) {
- j = 0;
- while ((*p != '\\0') && (*p != ' ') && (*p != '\\n')) {
- token[i][j] = *p;
- j++;
- p++;
- }
- token[i][j] = '\\0';
- len++;
- while (*p == ' ') {
- p++;
- }
- if (*p == '\\0' || *p == '\\n')
- break;
- }
- }
- int is_float_point(char *p)
- {
- char *h;
- for (h = p; *h != '\\0'; h++) {
- if (*h == '.')
- return 1;
- }
- return 0;
- }
- void token_out()
- {
- int i;
- for (i = 0; i < len; i++) {
- if (token[i][0] != ' ' )
- printf("%s ", token[i]);
- }
- printf("\\n");
- }
- void set_zero(char *p, int size)
- {
- int k;
- for (k = 0; k < size; k++) {
- *(p + k) = '\\0';
- }
- }
- void tok_del(char *s)
- {
- int i, j, k;
- float a, b, c;
- int m ,n, l;
- char buf1[16] = "";
- char buf2[16] = "";
- for (i = 0 ; i < 64; i++) {
- if (strcmp(token[i], s) == 0) {
- for (k = 0; k < 16; k++)
- buf1[k] = token[i - 1][k];
- for (k = 0; k < 16; k++)
- buf2[k] = token[i + 1][k];
- if (is_float_point(buf1) || is_float_point(buf2)) {
- a = atof(buf1);
- b = atof(buf2);
- if (strcmp(s, "*") == 0)
- c = a * b;
- if (strcmp(s, "/") == 0)
- c = a * b;
- if (strcmp(s, "+") == 0)
- c = a * b;
- if (strcmp(s, "-") == 0)
- c = a * b;
- sprintf(token[i - 1] , "%f", c);
- } else {
- m = atoi(buf1);
- n = atoi(buf2);
- if (strcmp(s, "*") == 0)
- l = m * n;
- if (strcmp(s, "/") == 0)
- l = m / n;
- if (strcmp(s, "+") == 0)
- l = m + n;
- if (strcmp(s, "-") == 0)
- l = m - n;
- sprintf(token[i - 1] , "%d", l);
- }
- for (j = i; j < 64; j++) {
- for (k = 0; k < 16; k++) {
- token[j][k] = token[j + 2][k];
- }
- }
- len -= 2;
- i--;
- token_out();
- }
- }
- }
- int main()
- {
- int i, j;
- char s[128] = "";
- for (i = 0 ; i < 64; i++) {
- for (j = 0; j < 64; j++) {
- token[i][j] = '\\0';
- }
- }
- read(1, s, sizeof(s));
- build_token(s);
- //token_out();
- tok_del("*");
- tok_del("/");
- tok_del("+");
- tok_del("-");
- return 0;
- }
- //该片段来自于http://www.codesnippet.cn/detail/260520149650.html
来源: http://www.codesnippet.cn/detail/260520149650.html