Как мне преобразовать массив символов в целое или двойное? - PullRequest
0 голосов
/ 26 марта 2012

Этот код является реализацией связанного списка стека, который решает проблемы postfix в postfix.txt.

Я смотрел на строку, которую я пытаюсь преобразовать.Я просто хочу сделать его двойным, прежде чем поместить его в свой стек, чтобы потом не мог делать с ним сложение, вычитание, умножение и деление.Я получаю сообщение об ошибке «ожидал выражения».Спасибо!

       void main()
        {
        ifstream postin("postfix.txt");
            char oper;
            char a[100];  
            int i=0;
            while(oper != '$')
            {
                stack operands;
                while(oper != '/n'&& oper != '$')
                {
                    while(oper != ' '&&oper != '/n'&& oper != '$')
                    {
                        oper = postin.get();
                        if(oper != '+' || oper != '*' || oper != '-' || oper != '/')
                        {
                            do
                            {
                            a[i]= oper;
                            i++;
                            }while(oper != ' ');
************************************************double number = atoi(a[]);
                            operands.Push(number)
                        }
                        else
                        {
                            double b = operands.Pop();
                            double a = operands.Pop();
                            if(oper == '+')
                            {
                                operands.Push(a+b);
                            }
                            else if(oper == '-')
                            {
                                operands.Push(a-b);
                            }
                            else if(oper == '/')
                            {
                                operands.Push(a/b);
                            }
                            else 
                            {
                                operands.Push(a*b);
                            }
                        }
                    }

                }

            }



        postin.close();
        }

Ответы [ 4 ]

0 голосов
/ 26 марта 2012

Джейк, ты забыл поставить индексное выражение:

double number = atoi(a[i]);
0 голосов
/ 26 марта 2012

Это просто atoi(a) или, возможно, atoi(a + n), если вы хотите начать с некоторого смещения.Хотя strtol() / strtod(), вероятно, являются более полезными функциями, поскольку они также сообщают вам, сколько символов они успешно проанализировали.И убедитесь, что где-то внутри массива есть нулевой терминатор.

0 голосов
/ 26 марта 2012

используйте atof () вместо atoi (), он преобразует строку в удвоенную

0 голосов
/ 26 марта 2012

Вы не хотите «преобразовывать» байтовый массив, вы хотите проанализировать строковое представление числа в правильный тип данных.

Во-первых, вам нужно знать, собираетесь ли вы иметь дело с целыми числами или значениями с плавающей запятой. Затем вы захотите использовать scanf () или atoi () / atof () для чтения значений в int или double. Все эти функции принимают аргумент char *, поэтому вы просто передадите a, а не a[].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...