预备知识
-
字符串相关函数
-
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 下特有的。
思路、步骤
-
键盘获取字符串;
-
定义一个字符指针数组,用于保存字符串分割后的结果;
-
循环进行分割,按照空格进行分割,将每个分割后的字符串保存到字符指针数组中;
-
获取数组中的第一个元素(即运算操作),将第二个和第三个参数转换成整数(使用 atoi() 函数 );
-
判断运算操作的字符串(使用 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;
}