预备知识

  1. 字符串相关函数
    • int atoi(const char * nptr); 将整数字符串转换成 int 类型的整数
    • char strtok(char str, const char * delim); 将字符串按照 delim 中的字符进行分割。当 strtok() 在参数 str 的字符串中发现参数 delim 分割字符时,则会将该字符改为 \0 字符,当连续出现多个时只替换第一个为 \0。在第一次调用时,strtok() 必须给与参数 str 字符串,往后调用则将参数 str 设置为 空指针,每次调用成功则返回指向被分割出片段的指针。
    • int strcmp(const char s1, const char s2); 比较 s1 和 s2 的大小,比较的是字符 ASCII 码大小,返回值为 0 表示相等。
    • int strcmp(char s1, char s2); 比较字符串,不区分大小写。该函数是 Windows 特有的。
    • int strcasecmp (const char s1, const char s2); 比较字符串,不区分大小写。该函数是 Linux 下特有的。

思路、步骤

  1. 键盘获取字符串;
  2. 定义一个字符指针数组,用于保存字符串分割后的结果;
  3. 循环进行分割,按照空格进行分割,将每个分割后的字符串保存到字符指针数组中;
  4. 获取数组中的第一个元素(即运算操作),将第二个和第三个参数转换成整数(使用 atoi() 函数 );
  5. 判断运算操作的字符串(使用 strcasecmp() 函数),根据对应的操作完成相应的运算。

代码实现

#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];
	int num1 = atoi(msg[1]);
	int num2 = atoi(msg[2]);
    
	if (strcasecmp(op, "add") == 0) {
		cout << num1 + num2 << endl;
	}
	else if (strcasecmp(op, "sub") == 0) {
		cout << num1 - num2 << endl;
	}
	else if (strcasecmp(op, "mul") == 0) {
		cout << num1 * num2 << endl;
	}
	else if (strcasecmp(op, "div") == 0) {
		if (num2 == 0) {
			cout << "Error" << endl;
		}
		else {
			cout << (double)num1 / num2 << endl;
		}
	}

	return 0;
}