|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Oleg I. Khovayko 2:5020/400 12 Feb 2002 21:16:49 To : Pavel Markov Subject : Re: Текстовое выражение вычислить -------------------------------------------------------------------------------- > Пример: 2-(3+5-(3-(3+3)-2)) } Да, то же самое решение, но чуть-чуть оптимизированное. По-моему, довольно занятно получилось: #include <stdio.h> char expr[] = "2-(3+5-(3-(3+3)-2))"; void rm_brackets(char *p1, char *p2) { char swap = '+' ^ '-'; char x = 0; char c; while(1) switch(c = *p1++) { case '(' : case ')' : x ^= swap; continue; case '+' : case '-' : c ^= x; default : *p2++ = c; continue; case 0 : *p2 = 0 ; return; } } int calc_expr(char *p) { int sum = atoi(p); char c; while(1) switch(c = *p++) { case '+' : sum += atoi(p); continue; case '-' : sum -= atoi(p); continue; case 0 : return sum; default : continue; } } main() { char workbuf[200]; rm_brackets(expr, workbuf); printf("Translated: [%s]->[%s]; sum=%d\n", expr, workbuf, calc_expr(workbuf)); } -- #include <best/regards.hpp> Oleg I. KHOVAYKO (301)435-5885 || WEB: http://olegh.spedia.net --- ifmail v.2.15dev5 * Origin: National Center for Biotechnology Information (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/11522687c3ebe.html, оценка из 5, голосов 10
|