忽略输入中的字符
Ignoring characters in the input
输入:
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的标准行为会自己跳过空白,所以你不必担心。
相关文章:
- 如何忽略第一个字符输入后的所有内容
- 使用单个变量对字符输入进行计数
- 确定用户字符输入 C++ 的结束
- 将单个字符串/字符输入串行监视器
- 如何将字符输入限制为仅获取一个字符串"cin"
- C++:使用 fgets() 读取字符输入时出错
- 如何拒绝 cin 中的字符输入并定义最小和最大整数值
- C++ 字符输入仅输出第一个字母
- 限制 2D 数组中的字符输入
- 循环直到整数输入在所需范围内无法处理非数字字符输入
- C++常量字符*输入
- 使用带符号字符输入的isalnum-Visual C++
- 限制C++中的字符输入
- 字符输入问题
- 字符** + 输入" "字符
- 文件 I/O 操作 - 奇怪的字符输入
- 如何在不暂停循环的情况下使用字符输入停止循环
- C++ - 对'if'语句使用特定字符输入
- 使用 "NEW" 获取字符输入和给定输出,并从用户那里获取字符串长度
- 正确的逐个字符输入