2015-06-05 2 views
0

Input:Игнорирование символов во входном

23 + 47 = machula

3247 + 5machula2 = 3749

machula13 + 75425 = 77038

Я решал вопрос в spoj, где вход был в форме «string + s tring = 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; 
} 

Есть ли лучший способ игнорировать «+» и «=» на входе вместе с непечатаемыми?

+0

Используйте [regex] (http://www.cplusplus.com/reference/regex/regex_match/). –

ответ

0

Если ваш вклад всегда в форме

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

Вы можете прочитать все маркеры и ничего не делать с оп и =, например:

std::string s1 op s2 eq s3; 

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

Вы можете подтвердить, что оп и eq - это то, что вы ожидаете, или можете игнорировать их вообще. Стандартное поведение istream пропустит пробелы самостоятельно, поэтому вам не нужно об этом беспокоиться.

Смежные вопросы