将 getline() 字符串拆分为多个 int 和 char 变量?
Splitting a getline() string into multiple int and char variables?
我在理解如何正确操作字符串时遇到一些问题。下面的程序是一个简单的计算器。
当我通过多个 cin 语句将输入直接放入变量时,一切正常。现在,我想使用 getline() 将输入作为字符串,并将 numbers/operators 存储在 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
方面不感兴趣。
首先,你应该问问自己是否有必要存储整个字符串,而不是像你之前所说的那样直接对变量使用 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;
我在理解如何正确操作字符串时遇到一些问题。下面的程序是一个简单的计算器。
当我通过多个 cin 语句将输入直接放入变量时,一切正常。现在,我想使用 getline() 将输入作为字符串,并将 numbers/operators 存储在 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
方面不感兴趣。
首先,你应该问问自己是否有必要存储整个字符串,而不是像你之前所说的那样直接对变量使用 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;