# include <stdlib.h>
# include <unistd.h>
typedef struct s_list
{
struct s_strlist *next;
char *item;
} t_list;
void ft_putstr(char **str)
{
while (*str)
{
write(1, &(*str), 1);
str++;
}
}
void printlist(t_list *list)
{
if (!list)
return ;
t_list *l;
l = list;
while (l)
{
ft_putstr(&(l->item));
l = l->next;
write(1, ' ', 1);
}
}
char *findint(char *str)
{
char *res
= malloc(12*sizeof(char)); int i = 0;
while (*str && *str >= '0' && *str <= '9' && *str != ' ')
{
res[i] = *str;
i++;
str++;
}
return (res);
}
void ft_list_reverse(t_list **begin_list)
{
t_list *a;
t_list *b;
if (!(*begin_list))
return ;
a = NULL;
while (*begin_list)
{
b = (*begin_list)->next;
(*begin_list)->next = a;
a = *begin_list;
*begin_list = b;
}
}
t_list *add_link(char *item, t_list *list)
{
t_list *el;
el
= (t_list
*)malloc(sizeof(t_list
)); el->item = item;
el->next = list;
return (el);
}
t_list *pop(t_list *list)
{
t_list *tmp;
tmp = list->next;
return (tmp);
}
t_list *convert(char *str)
{
t_list *list;
t_list *res;
char *s;
list = NULL;
res = NULL;
while (*str)
{
if (*str >= '0' && *str <= '9') //добавление цифорок
{
s = findint(str);
res = add_link(s, res);
}
if (*str == '/' || *str == '*' || *str == '%') //два оператора одной важности не могут стоять вместе
{
if (list != NULL && (list->item == '/' || list->item == '*' || list->item == '%'))
{
res = add_link(list->item, res);
list = pop(list);
}
list = add_link(*str, list);
}
if (*str == '+' || *str == '-') // младшие операторы не могут быть рядом с корешами и высшими знаками
{
while (list != NULL && list->item != '(')
{
s = list->item;
list = pop(list);
res = add_link(s, res);
}
list = add_link(*str, list);
}
if (*str == ')') //после закрывающей скобочки попаем оперторы помещенные внутрь
{
while (list != NULL && list->item != '(')
{
s = list->item;
list = pop(list);
res = add_link(s, res);
}
list = pop(list);
}
if (*str == '(')
list = add_link(*str, list);
str++;
printlist(list);
write(1, "\n", 1);
printlist(res);
write(1, "\n", 1);
}
}
int main()
{
char *str = "(1 + 2 / 3 * (4 + 5) - 6)";
t_list *g = convert(str);
while (g)
{
ft_putstr(g->item);
g = g->next;
}
return 0;
}
IyBpbmNsdWRlIDxzdGRsaWIuaD4KIyBpbmNsdWRlIDx1bmlzdGQuaD4KIAp0eXBlZGVmIHN0cnVjdCAgICAgICAgICBzX2xpc3QKewogICAgc3RydWN0IHNfc3RybGlzdCAgICAqbmV4dDsKICAgIGNoYXIgICAgICAgICAgICAgICAgKml0ZW07CiAKfSAgICAgICAgICAgICAgICAgICAgICAgdF9saXN0OwogCnZvaWQgZnRfcHV0c3RyKGNoYXIgKipzdHIpCnsKICAgIHdoaWxlICgqc3RyKQogICAgewogICAgICAgIHdyaXRlKDEsICYoKnN0ciksIDEpOwogICAgICAgIHN0cisrOwogICAgfQp9CiAKdm9pZCBwcmludGxpc3QodF9saXN0ICpsaXN0KQp7CiAgICBpZiAoIWxpc3QpCiAgICAgICAgcmV0dXJuIDsKICAgIHRfbGlzdCAqbDsKICAgIGwgPSBsaXN0OwogICAgd2hpbGUgKGwpCiAgICB7CiAgICAgICAgZnRfcHV0c3RyKCYobC0+aXRlbSkpOwogICAgICAgIGwgPSBsLT5uZXh0OwogICAgICAgIHdyaXRlKDEsICcgJywgMSk7CiAgICB9Cn0KIApjaGFyICpmaW5kaW50KGNoYXIgKnN0cikKewogICAgY2hhciAqcmVzID0gbWFsbG9jKDEyKnNpemVvZihjaGFyKSk7CiAgICBpbnQgaSA9IDA7CiAKICAgIHdoaWxlICgqc3RyICYmICpzdHIgPj0gJzAnICYmICpzdHIgPD0gJzknICYmICpzdHIgIT0gJyAnKQogICAgewogICAgICAgIHJlc1tpXSA9ICpzdHI7CiAgICAgICAgaSsrOwogICAgICAgIHN0cisrOwogICAgfQogICAgcmV0dXJuIChyZXMpOwp9CiAKdm9pZCBmdF9saXN0X3JldmVyc2UodF9saXN0ICoqYmVnaW5fbGlzdCkKewogICAgdF9saXN0ICphOwogICAgdF9saXN0ICpiOwogCiAgICBpZiAoISgqYmVnaW5fbGlzdCkpCiAgICAgICAgcmV0dXJuIDsKICAgIGEgPSBOVUxMOwogICAgd2hpbGUgKCpiZWdpbl9saXN0KQogICAgewogICAgICAgIGIgPSAoKmJlZ2luX2xpc3QpLT5uZXh0OwogICAgICAgICgqYmVnaW5fbGlzdCktPm5leHQgPSBhOwogICAgICAgIGEgPSAqYmVnaW5fbGlzdDsKICAgICAgICAqYmVnaW5fbGlzdCA9IGI7CiAgICB9Cn0KIAp0X2xpc3QgKmFkZF9saW5rKGNoYXIgKml0ZW0sIHRfbGlzdCAqbGlzdCkKewogICAgdF9saXN0ICplbDsKIAogICAgZWwgPSAodF9saXN0KiltYWxsb2Moc2l6ZW9mKHRfbGlzdCkpOwogICAgZWwtPml0ZW0gPSBtYWxsb2MoMTIpOwogICAgZWwtPml0ZW0gPSBpdGVtOwogICAgZWwtPm5leHQgPSBsaXN0OwogICAgcmV0dXJuIChlbCk7Cn0KIAp0X2xpc3QgKnBvcCh0X2xpc3QgKmxpc3QpCnsKICAgIHRfbGlzdCAqdG1wOwogCiAgICB0bXAgPSBsaXN0LT5uZXh0OwogICAgZnJlZShsaXN0KTsKICAgIHJldHVybiAodG1wKTsKfQogCnRfbGlzdCAqY29udmVydChjaGFyICpzdHIpCnsKICAgIHRfbGlzdCAqbGlzdDsKICAgIHRfbGlzdCAqcmVzOwogICAgY2hhciAqczsKIAogICAgbGlzdCA9IE5VTEw7CiAgICByZXMgPSBOVUxMOwogICAgd2hpbGUgKCpzdHIpCiAgICB7CiAgICAgICAgaWYgKCpzdHIgPj0gJzAnICYmICpzdHIgPD0gJzknKSAvL9C00L7QsdCw0LLQu9C10L3QuNC1INGG0LjRhNC+0YDQvtC6CiAgICAgICAgewogICAgICAgICAgICBzID0gZmluZGludChzdHIpOwogICAgICAgICAgICByZXMgPSBhZGRfbGluayhzLCByZXMpOwogICAgICAgIH0KICAgICAgICBpZiAoKnN0ciA9PSAnLycgfHwgKnN0ciA9PSAnKicgfHwgKnN0ciA9PSAnJScpIC8v0LTQstCwINC+0L/QtdGA0LDRgtC+0YDQsCDQvtC00L3QvtC5INCy0LDQttC90L7RgdGC0Lgg0L3QtSDQvNC+0LPRg9GCINGB0YLQvtGP0YLRjCDQstC80LXRgdGC0LUKICAgICAgICB7CiAgICAgICAgICAgIGlmIChsaXN0ICE9IE5VTEwgJiYgKGxpc3QtPml0ZW0gPT0gJy8nIHx8IGxpc3QtPml0ZW0gPT0gJyonIHx8IGxpc3QtPml0ZW0gPT0gJyUnKSkKICAgICAgICAgICAgewogICAgICAgICAgICByZXMgPSBhZGRfbGluayhsaXN0LT5pdGVtLCByZXMpOwogICAgICAgICAgICBsaXN0ID0gcG9wKGxpc3QpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxpc3QgPSBhZGRfbGluaygqc3RyLCBsaXN0KTsKICAgICAgICB9CiAgICAgICAgaWYgKCpzdHIgPT0gJysnIHx8ICpzdHIgPT0gJy0nKSAvLyDQvNC70LDQtNGI0LjQtSDQvtC/0LXRgNCw0YLQvtGA0Ysg0L3QtSDQvNC+0LPRg9GCINCx0YvRgtGMINGA0Y/QtNC+0Lwg0YEg0LrQvtGA0LXRiNCw0LzQuCDQuCDQstGL0YHRiNC40LzQuCDQt9C90LDQutCw0LzQuAogICAgICAgIHsKICAgICAgICAgICAgd2hpbGUgKGxpc3QgIT0gTlVMTCAmJiBsaXN0LT5pdGVtICE9ICcoJykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcyA9IGxpc3QtPml0ZW07CiAgICAgICAgICAgICAgICBsaXN0ID0gcG9wKGxpc3QpOwogICAgICAgICAgICAgICAgcmVzID0gYWRkX2xpbmsocywgcmVzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBsaXN0ID0gYWRkX2xpbmsoKnN0ciwgbGlzdCk7CiAgICAgICAgfQogICAgICAgIGlmICgqc3RyID09ICcpJykgLy/Qv9C+0YHQu9C1INC30LDQutGA0YvQstCw0Y7RidC10Lkg0YHQutC+0LHQvtGH0LrQuCDQv9C+0L/QsNC10Lwg0L7Qv9C10YDRgtC+0YDRiyDQv9C+0LzQtdGJ0LXQvdC90YvQtSDQstC90YPRgtGA0YwKICAgICAgICB7CiAgICAgICAgICAgIHdoaWxlIChsaXN0ICE9IE5VTEwgJiYgbGlzdC0+aXRlbSAhPSAnKCcpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHMgPSBsaXN0LT5pdGVtOwogICAgICAgICAgICAgICAgbGlzdCA9IHBvcChsaXN0KTsKICAgICAgICAgICAgICAgIHJlcyA9IGFkZF9saW5rKHMsIHJlcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGlzdCA9IHBvcChsaXN0KTsKICAgICAgICB9CiAgICAgICAgaWYgKCpzdHIgPT0gJygnKQogICAgICAgICAgICBsaXN0ID0gYWRkX2xpbmsoKnN0ciwgbGlzdCk7CiAgICAgICAgc3RyKys7CiAgICAgICAgcHJpbnRsaXN0KGxpc3QpOwogICAgICAgIHdyaXRlKDEsICJcbiIsIDEpOwogICAgICAgIHByaW50bGlzdChyZXMpOwogICAgICAgIHdyaXRlKDEsICJcbiIsIDEpOwogICAgfQp9CiAKaW50IG1haW4oKQp7CiAgICBjaGFyICpzdHIgPSAiKDEgKyAyIC8gMyAqICg0ICsgNSkgLSA2KSI7CiAgICB0X2xpc3QgKmcgPSBjb252ZXJ0KHN0cik7CiAgICB3aGlsZSAoZykKICAgIHsKICAgIGZ0X3B1dHN0cihnLT5pdGVtKTsKICAgIGcgPSBnLT5uZXh0OwogICAgfQpyZXR1cm4gMDsKfQ==