题意整理。

  • 键盘输入一个字符串,包括一个运算方式以及两个数,以空格隔开。
  • 解析字符串中的内容,并做相应的运算。

方法一(字符串分割)

1.解题思路

  • 将原字符串按空格分割,用op存储运算符,num1存储第一个数,num2存储第二个数。
  • 然后根据op的类型,进行相应的处理。如果是加法,则将num1与num2相加,如果是减法,则将num1与num2相减,如果是乘法,则将num1与num2相乘,如果是除法,则将num1与num2相除。

图解展示: alt

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.复杂度分析

  • 时间复杂度:只需分割三个字符串,所以时间复杂度为O(1)O(1)
  • 空间复杂度:需要额外常数级别的空间,所以空间复杂度为O(1)O(1)