忽略输入中的字符

Ignoring characters in the input

本文关键字:字符 输入      更新时间:2023-10-16

输入:

3

23 + 47 = machula

3247 + 5machula2 = 3749

machula13 + 75425 = 77038

我正在解决spoj中的一个问题,其中输入的形式是"字符串+字符串=字符串"。我必须将第一,第二和第三个数字存储在字符串中,跳过'+'和'='。为此,我创建了两个字符变量来存储'+'和'='。

#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;
}   

有没有更好的方法来忽略输入中的'+'和'='以及空白?

如果你的输入总是

<str1> <op> <str2> = <str3>

您可以读取所有令牌而不使用op和=,例如:

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

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