题意整理。
- 键盘输入一个字符串,包括一个运算方式以及两个数,以空格隔开。
- 解析字符串中的内容,并做相应的运算。
方法一(字符串分割)
1.解题思路
- 将原字符串按空格分割,用op存储运算符,num1存储第一个数,num2存储第二个数。
- 然后根据op的类型,进行相应的处理。如果是加法,则将num1与num2相加,如果是减法,则将num1与num2相减,如果是乘法,则将num1与num2相乘,如果是除法,则将num1与num2相除。
图解展示:
2.代码实现
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char str[100] = { 0 };
cin.getline(str, sizeof(str));
char* msg[30]={str,nullptr};
int i=0;
//将原字符串按空格分割
while((msg[i]=strtok(msg[i]," "))&&++i);
//存储运算符
char* op=msg[0];
//存储整数1,利用atoi将字符串类型转为整型
int num1=atoi(msg[1]);
//存储整数2,利用atoi将字符串类型转为整型
int num2=atoi(msg[2]);
//如果是加法,则将num1与num2相加
if(strcasecmp(op, "add")==0){
cout<<num1+num2<<endl;
}
//如果是减法,则将num1与num2相减
else if(strcasecmp(op, "sub")==0){
cout<<num1-num2<<endl;
}
//如果是乘法,则将num1与num2相乘
else if(strcasecmp(op, "mul")==0){
cout<<num1*num2<<endl;
}
//如果是除法,则将num1与num2相除
else if(strcasecmp(op, "div")==0){
//除数为0,输出"Error"
if(num2==0){
cout<<"Error"<<endl;
}
else{
cout<<num1/num2<<endl;
}
}
return 0;
}
3.复杂度分析
- 时间复杂度:只需分割三个字符串,所以时间复杂度为。
- 空间复杂度:需要额外常数级别的空间,所以空间复杂度为。