简单的方法
我们将假设用户输入两个数字和一个运算符(+、-、*、/),然后根据所选的运算符执行相应的操作。
#include <iostream>
using namespace std;
int main() {
double num1, num2;
char op;
cout << "输入 (+,-,*,/): ";
cin >> num1 >> num2 >> op;
if(op == '+') {
cout << num1 + num2 << endl;
} else if(op == '-') {
cout << num1 - num2 << endl;
} else if(op == '*') {
cout << num1 * num2 << endl;
} else if(op == '/') {
if(num2 != 0)
cout << num1 / num2 << endl;
else
cout << "除数不能是0." << endl;
} else {
cout << "输入错误!" << endl;
}
return 0;
}
也可以用switch
#include <iostream>
using namespace std;
int main() {
double num1, num2;
char op;
cout << "输入 (+,-,*,/): ";
cin >> num1 >> num2 >> op;
switch(op) {
case '+':
cout << num1 + num2 << endl;
break;
case '-':
cout << num1 - num2 << endl;
break;
case '*':
cout << num1 * num2 << endl;
break;
case '/':
if(num2 != 0)
cout << num1 / num2 << endl;
else
cout << "除数不能是0." << endl;
break;
default:
cout << "输入错误!" << endl;
}
return 0;
}
可能会觉得这样的输入方法有些蹩脚。
毕竟谁计算运算是先输数字,再输入符号,并且还要输一下空格一下,那么有没有好的方法,像作业本上写计算一样丝滑呢?
当然有了:
(扩展学习)计算器
扩展内容不要求初学者会,作为了解。
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main() {
string input;
double num1, num2;
char op;
cout << "请输入计算表达式(例如:33+44):" << endl;
getline(cin, input); // 使用getline读取整个行
stringstream ss(input);
ss >> num1 >> op >> num2; // 将输入的字符串流解析为数字和运算符
if (ss.fail()) { // 如果输入格式不正确
cout << "输入有误,请检查格式是否正确!" << endl;
return 1;
}
// 执行计算
if(op == '+') {
cout << "结果是:" << num1 + num2 << endl;
} else if(op == '-') {
cout << "结果是:" << num1 - num2 << endl;
} else if(op == '*') {
cout << "结果是:" << num1 * num2 << endl;
} else if(op == '/') {
if(num2 != 0)
cout << "结果是:" << num1 / num2 << endl;
else
cout << "错误:除数不能为零。" << endl;
} else {
cout << "错误:无效的运算符。" << endl;
}
return 0;
}
这样就可以直接输入,得到结果了。
这里边大家可以注意到,用到了一个stringstream
来转换输入。
在C++中,stringstream
类位于 <sstream>
头文件中,它是 iostream
库的一部分,专门用于处理字符串流。stringstream
可以看作是连接字符串和流的一个桥梁,它允许我们像处理输入/输出流一样来读写字符串。
创建 stringstream
对象
当执行 stringstream ss(input);
时,创建一个名为 ss
的 stringstream
对象,并且用一个已存在的字符串 input
来初始化它。这意味着 ss
将会包含 input
字符串的内容,但同时它也具备流的所有特性,包括能够从中读取和向其中写入数据。
stringstream
的读写功能
由于 stringstream
是流,你可以使用流的操作符 >>
和 <<
来读取和写入数据。例如,如果你有一个整数变量 int x;
并且想要从 ss
中读取一个整数值给 x
,你可以这样写:
int x;
ss >> x; // 从ss中读取一个整数给x
同样地,如果你想把一个整数写入 ss
,可以这样做
int y = 42;
ss << y; // 将y的值写入ss
初始化 stringstream
的意义
当 stringstream
被初始化为一个字符串时,它意味着你可以开始解析这个字符串,就像处理普通的输入流一样。例如,如果你的 input
字符串是 "123 apples"
,你可以轻松地从中读取出数字和文字:
int number;
string word;
stringstream ss(input);
ss >> number >> word;
// 现在number应该是123,word应该是"apples"
总的来说,stringstream ss(input);
这行代码创建了一个 stringstream
对象 ss
,并用字符串 input
来初始化它。这使得你可以使用流的特性来处理 input
字符串,包括读取和写入数据。这是一种非常方便的方式来解析字符串中的数据,尤其是当字符串格式较为复杂时。
然后输入的时候,用不同类型的变量来接收,就可以从开头获取字符串中对应的数据了。
还不快来试试?