忽略输入

时间:2015-06-05 09:44:44

标签: c++ input

输入:

  

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;在输入中连同空格?

1 个答案:

答案 0 :(得分:0)

如果您的输入始终采用

的形式
<str1> <op> <str2> = <str3>

您可以阅读所有令牌,并且不会对op和=执行任何操作,例如:

std::string s1 op s2 eq s3;

std::cin >> s1 >> op >> s2 >> eq >> s3;

您可以验证op和eq是您所期望的,或者可以完全忽略它们。 istream的标准行为会自行跳过空白,因此您不必担心这一点。