输入:
3
23 + 47 = machula
3247 + 5machula2 = 3749
machula13 + 75425 = 77038
我在spoj中解决了一个问题,输入的格式是" string + string = string"。我必须将第一个,第二个和第三个数字存储在跳过' +'和' ='。为此,我创建了两个char变量来存储' +'和' ='。
#include <iostream>
#include <string>
int main()
{
using namespace std;
int t;
cin >> t;
for (int iii = 0; iii < t; iii += 1)
{
cin.ignore();
int num1, num2, num3;
int condition = 0;
string input1;
cin >> input1;
if (input1.find("machula") != string::npos)
{
condition = 1;
}
char op1;
cin >> op1;
string input2;
cin >> input2;
if (input2.find("machula") != string::npos)
{
condition = 2;
}
char op2;
cin >> op2;
string input3;
cin >> input3;
if (input3.find("machula") != string::npos)
{
condition = 3;
}
switch (condition)
{
case 1:
num2 = stoi(input2);
num3 = stoi(input3);
num1 = num3 - num2;
break;
case 2:
num1 = stoi(input1);
num3 = stoi(input3);
num2 = num3 - num1;
break;
case 3:
num1 = stoi(input1);
num2 = stoi(input2);
num3 = num1 + num2;
break;
}
cout << num1 << " + " << num2 << " = " << num3 << endl;
}
return 0;
}
有没有更好的方法来忽略&#39; +&#39;并且&#39; =&#39;在输入中连同空格?
答案 0 :(得分:0)
如果您的输入始终采用
的形式<str1> <op> <str2> = <str3>
您可以阅读所有令牌,并且不会对op和=执行任何操作,例如:
std::string s1 op s2 eq s3;
std::cin >> s1 >> op >> s2 >> eq >> s3;
您可以验证op和eq是您所期望的,或者可以完全忽略它们。 istream的标准行为会自行跳过空白,因此您不必担心这一点。