У меня возникли проблемы с пониманием того, как правильно манипулировать строками. Программа ниже - простой калькулятор.Разбиение строки getline() на несколько переменных int и char?
Когда я вводил вход непосредственно в переменные с помощью нескольких инструкций cin, все работало нормально. Теперь я хочу взять ввод как строку с getline() и сохранить числа/операторы в существующих переменных из getline().
Моей главной проблемой является то, что я хочу, чтобы программа распознавала как 2+2
, так и 2 + 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
аспекты программы.
Кроме того, пожалуйста, игнорируйте cout << «Я сделал это для x!» Это были некоторые тесты, которые я забыл вынести. – DoubleLlama
[Здесь] (http://stackoverflow.com/questions/23047052/why-does-reading-a-record-struct-fields-from-stdistream-fail-and-how-can-i-fi) - некоторые подсказки чтобы облегчить вашу жизнь. Используйте 'std :: istringstream'. –
Будет ли операция всегда быть единственным символом? – NathanOliver