Почему вместо значений массива появляется мусор? - PullRequest
0 голосов
/ 04 июня 2018

Я беру уравнение от пользователя (например, 1X1 + 2X2 = 24), независимо от количества переменных, я делю его на 1X1, 2X2 на +, - или =, а затем помещаю их в массив char, и каждый токингx или X, и поместите его в другой массив, но появляется какой-то мусор

#include<iostream>
#include <stdio.h>
#include <string.h>
#include<string>
#include <algorithm>
#include<vector>
using namespace std;
int main()
{
    string a;
    cout<<"Enter Equation: "<<endl;
    cin>>a; //string of the equation
    int num= a.size();
    char str[num]; //view it as array of char
    for (int k=0;k<num;k++)
    {
      str[k]=a[k];
      cout<<str[k];
    }

    int i=0;
    char *pch;
    int count = 0;
    for (int i = 0; i < a.size(); i++)
    {
        //counting + , - and = to see how many element i need in array
        if (a[i] == '+'||a[i] == '-'||a[i] == '=')
            count++;
    }

    char *array[count];
    cout<<"\nSplitting string into tokens: "<<a;
    pch = strtok (str,"= + -");
    while (pch != NULL)
    {
    array[i++]=pch;
    pch = strtok (NULL, "= + -");
    }

// printing every variable
    for(i=0;i<count+1;i++)
      {
          cout<<endl<<array[i];
      }

    char *pch_var;
    char *array_var[2];
    for(int j=0; j<count+1;j++)
    {
        cout<<"\nSplitting Variable into tokens: "<<array[j];
        pch_var = strtok (array[j],"x X");
        while (pch_var != NULL)
        {
        array_var[i++]=pch_var;
        pch_var = strtok (NULL, "x X");
        }
        cout<<array_var[0]<<endl<<array_var[1];
    }

    return 0;
}

результат будет таким:

Введите уравнение:

1X1 + 2X2 = 24// от пользователя

1X1 + 2X2 = 24 // здесь запускается функция моего кода

Разделение строки на токены: 1X1 + 2X2 = 24

1X1

2X2

24 {t {k║

Разделение переменной на токены: 1X1P ■ m

] Uï Uï∞â∞SVWh

Разделение переменнойв токены: 2X2P ■ m

] Uï Uï∞â∞SVWh

1 Ответ

0 голосов
/ 04 июня 2018

Если я правильно понял, вы хотите, чтобы пользователи вводили уравнение.Затем вы хотите разобрать это уравнение и дать ответ.Если это так, обычным способом является изменение уравнения с инфикса на префикс или постфикс и помещение его в стек.Затем вы обрабатываете каждую запись стека и выполняете свои вычисления.

Предполагая, что у вас есть ввод 1 + 2 (это инфиксная форма), вы меняете его на 1 2 +, который является постфиксной формой.

Для вашего примера 1X1+2X2+3X2+3x1=24 постфикс становится 1 1 x 2 2 x + 3 2 x + 3 1 x + 24 =.Вы начинаете слева и извлекаете стек до первого операнда, вычисляете результат и возвращаетесь, пока стек не будет полностью обработан.

 step 1) 1 1 x 2 2 x + 3 2 x + 3 1 x + 24 =
 step 2)     1     4 + 3 2 x + 3 1 x + 24 =
 step 3)             5 3 2 x + 3 1 x + 24 =
 step 4)             5     6 + 3 1 x + 24 =
 step 5)                     11 3 1 x + 24 =
 step 6)                     11     3 + 24 =
 step 7)                              14 24 =
 step 8)                              false

Я думаю, что сделать выражение с префиксом легче для реализации, но труднее для понимания.Вот несколько ссылок

http://scanftree.com/Data_Structure/prefix-postfix-infix-online-converter

http://interactivepython.org/runestone/static/pythonds/BasicDS/InfixPrefixandPostfixExpressions.html

Надеюсь, это поможет.

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