Вектор push_back & pop_back - PullRequest
       10

Вектор push_back & pop_back

0 голосов
/ 24 ноября 2018

Я работаю над заданием.Я закодировал назначение, и все работает как надо, за исключением того, что в моем выводе отсутствует цифра.Я также приложил пример вывода.После ввода математического выражения в строку, например 35 * 4 - 6 / (9 + 3), цифра сбрасывается.В обычном порядке, 3 будет отсутствовать.В обратном порядке, 9 будет отсутствовать.Я не понимаю, почему это происходит.

Любая помощь, или я бы предпочел какое-либо руководство, будет оценена.Я неправильно использую push_back?Код выглядит следующим образом:

#include<iostream>
#include<string>
#include<vector>
using namespace std;

vector<string> split(string);

vector<string> splitback(string);

int main()
{
vector<string>  vectorExpression;
string          expression;

cout << "Enter an expression :";
    getline(cin, expression);

vectorExpression = split(expression);

for (int i = 0; i < vectorExpression.size(); i++)
{
    cout << vectorExpression[i] << endl;
}
    cout << endl;

vectorExpression = splitback(expression);

for (int i = 0; i < vectorExpression.size(); i++)
{
    cout << vectorExpression[i] << endl;
}

system("pause");
return 0;
}

vector<string> split(string expression)
{
vector<string>  splitExpression;
string          digit = "",
                x = "";

for (int i = 0; i < expression.size(); i++)
{
    if (expression[i] >= '0' && expression[i] <= '9')
    {
        digit = digit + expression[i];  
    }
    else if (expression[i] != ' ')  
    {
        x = ""; 
        x = x + expression[i];  
        splitExpression.push_back(x);   
    }
    else
    {
        if (digit.size() > 0) 
        {
            splitExpression.push_back(digit);   
            digit = "";
        }
    }
}

if (digit.size() > 0) 
{
    splitExpression.push_back(digit);
}

return splitExpression;
}

vector<string> splitback(string expression)
{
vector<string>  splitBackExpression;
string          number = "",
                x = "";

for (int i = expression.size() - 1; i >= 0; i--)
{
    if (expression[i] >= '0' && expression[i] <= '9')
    {
        number = expression[i] + number;
    }
    else if (expression[i] != ' ')
    {
        x = "";
        x = x + expression[i];
        splitBackExpression.push_back(x);
    }

    if (number.size() > 0)
    {
        splitBackExpression.push_back(number);
        number = "";
    }
}
return splitBackExpression;
}

Problem Example Screenshot

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Вот окончательный ответ на мой собственный вопрос или, по крайней мере, решение, которое я нашел с помощью отсюда.

#include<iostream>
#include<string>
#include<vector>
using namespace std;

vector<string> split(const string&);    

vector<string> splitback(const string&);    

int main()
{
    vector<string>  forwardExpression,
                    reverseExpression;
    string          expression;

    cout << "Enter an expression :";
        getline(cin, expression);

    //////////////////////////////////////////////////
    //         FORWARD DISPLAY OF EXPRESSION        //
    //////////////////////////////////////////////////
    forwardExpression = split(expression);

    cout << "'" << expression << "'" << " split into individual entities forwards         
    yields:" << endl;
        cout << endl;

    for (int i = 0; i < forwardExpression.size(); i++)
    {
        cout << forwardExpression[i] << endl;
    }
        cout << endl;

    //////////////////////////////////////////////////
    //        BACKWARD DISPLAY OF EXPRESSION        //
    //////////////////////////////////////////////////
    reverseExpression = splitback(expression);

    cout << "'" << expression << "'" << " split into individual entities     
    backwards yields:" << endl;
        cout << endl;

    for (int i = 0; i < reverseExpression.size(); i++)
    {
        cout << reverseExpression[i] << endl;
    }
        cout << endl;

    system("pause");
    return 0;
}

//////////////////////////////////////////////////
//        FORWARD FUNCTION OF EXPRESSION        //
//////////////////////////////////////////////////
vector<string> split(const string &expression)
{
    vector<string>  splitExpression;
    string          digit = "",
                    x = "";

    for (int i = 0; i < expression.size(); i++)     
    {
        if (expression[i] >= '0' && expression[i] <= '9')
        {
            digit = digit + expression[i];  
        }
        else
        {
            if (digit.size() > 0)   
            {
                splitExpression.push_back(digit);   
                digit = ""; 
            }           
            if (expression[i] != ' ')   
            {
                x = expression[i];  
                splitExpression.push_back(x);    
            }
        }
    }

    if (digit.size() > 0)   
    {
        splitExpression.push_back(digit);   
    }

    return splitExpression; 
}

//////////////////////////////////////////////////
//       BACKWARD FUNCTION OF EXPRESSION        //
//////////////////////////////////////////////////
vector<string> splitback(const string &expression)
{
    vector<string>  splitBackExpression;
    string          digit = "",
                    x = "";

    for (int i = expression.size() - 1; i >= 0; i--)
    {
        if (expression[i] >= '0' && expression[i] <= '9')   
        {
            digit = expression[i] + digit;  
        }
        else
        {
            if (digit.size() > 0)   
            {
                splitBackExpression.push_back(digit);   
                digit = ""; 
            }

            if (expression[i] != ' ')   
            {
                x = expression[i];  
                splitBackExpression.push_back(x);    
            }
        }
    }

    if (digit.size() > 0)   
    {
        splitBackExpression.push_back(digit);   
    }

    return splitBackExpression; 
}
0 голосов
/ 24 ноября 2018

Ваша split функция неверна, вы забыли добавить цифры, правильной будет

vector<string> split(string expression)
{
    vector<string>  splitExpression;
    string          digit = "",
                    x = "";

    for (int i = 0; i < expression.size(); i++)
    {
        if (expression[i] >= '0' && expression[i] <= '9')
        {
            digit = digit + expression[i];  
        }
        else  
        {
            // don't forget digit if there was one
            if (digit.size() > 0) 
            {
                splitExpression.push_back(digit);   
                digit = "";
            } 
            // also add what comes next if not a whitespace
            if (expression[i] != ' ')
            {
                x = expression[i];
                splitExpression.push_back(x);
            }
        }
    }

    if (digit.size() > 0) 
    {
        splitExpression.push_back(digit);
    }

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