将 getline() 字符串拆分为多个 int 和 char 变量?

Splitting a getline() string into multiple int and char variables?

我在理解如何正确操作字符串时遇到一些问题。下面的程序是一个简单的计算器。

当我通过多个 cin 语句将输入直接放入变量时,一切正常。现在,我想使用 getline() 将输入作为字符串,并将 numbers/operators 存储在 getline() 的现有变量中。

我的主要问题是我希望程序能够识别 2+22 + 2

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main()
{
    int Num1, Num2, Num3 = 0, result;
    char Operator1, Operator2 = 0;
    string input, in1;

    cout << "Enter your equation on one line.\n";
    getline(cin, input);


    //this is where getline needs to be manipulated into Num1/2/3 and Operator1/2

    cout << input;


    if (Operator2 != 0)
    {
        if (Operator1 == '+')
        {
            if (Operator2 == '+')
            {
                result = Num1 + Num2 + Num3;
                cout << "I made it to A!";
            }
            else if (Operator2 == '-')
            {
                result = Num1 + Num2 - Num3;
            }
            else if (Operator2 == '/')
            {
                result = Num1 + Num2 / Num3;
            }
            else if (Operator2 == '*')
            {
                result = Num1 + Num2 * Num3;
            }
        }
        else if (Operator1 == '-')
        {
            if (Operator2 == '+')
            {
                result = Num1 - Num2 + Num3;
            }
            else if (Operator2 == '-')
            {
                result = Num1 - Num2 - Num3;
            }
            else if (Operator2 == '/')
            {
                result = Num1 - Num2 / Num3;
            }
            else if (Operator2 == '*')
            {
                result = Num1 - Num2 * Num3;
            }
        }
        else if (Operator1 == '/')
        {
            if (Operator2 == '+')
            {
                result = Num1 / Num2 + Num3;
            }
            else if (Operator2 == '-')
            {
                result = Num1 / Num2 - Num3;
            }
            else if (Operator2 == '/')
            {
                result = Num1 / Num2 / Num3;
            }
            else if (Operator2 == '*')
            {
                result = Num1 / Num2 * Num3;
            }
        }
        else if (Operator1 == '*')
        {
            if (Operator2 == '+')
            {
                result = Num1 * Num2 + Num3;
            }
            else if (Operator2 == '-')
            {
                result = Num1 * Num2 - Num3;
            }
            else if (Operator2 == '/')
            {
                result = Num1 * Num2 / Num3;
            }
            else if (Operator2 == '*')
            {
                result = Num1 * Num2 * Num3;
            }
        }
        else
        {
            cout << "I don't recognize that operator. Did you type in one of these?: + - * /";
        }
    }
    else if (Operator2 == 0)
    {
        if (Operator1 == '+')
    {
            result = Num1 + Num2;
    }
        else if (Operator1 == '-')
    {
            result = Num1 - Num2;
    }
        else if (Operator1 == '*')
    {
            result = Num1 * Num2;
    }
        else if (Operator1 == '/')
    {
            result = Num1 / Num2;
    }
        else
    {
        cout << "I don't recognize that operator. Did you type in one of these?: + - * /";
    }

        result = Num1 + Num2;
        cout << "I made it to B!";
    }


    cout << "Your result is: " << result << endl << endl;

    return 0;
}

如有任何帮助,我们将不胜感激,但我更希望对工作代码进行解释。

我对程序的数学逻辑或 using namespace std 方面不感兴趣。

首先,你应该问问自己是否有必要存储整个字符串,而不是像你之前所说的那样直接对变量使用 cin

如果你真的想存储整个字符串(就像你现在为了回显它所做的那样),你可以考虑使用字符串流(出于某种原因,你已经在你的文件中包含了 sstream) :

getline(cin, input);

std::istringstream iss(input);
// you can now use iss just as cin.
// I'm not sure exactly what you want to do, but it would look something like this:
iss >> num1;
iss >> Operator1;
iss >> num2;

cout << input;