解题思路:使用bool函数判定字符串中的数字和运算符号,输入字符串后从第0个元素开始检查,遇到数字时完成int转化(char转int固定格式:chardigit-'0'),遇到运算符号时储存在局部变量中最后再进行判定。本来想直接scanf("%d%c%d=%d"),能省略掉大多步骤,但这样好像和最初做的一些入门简单题一样了。。。
注意事项:检查下每次输入时变量的重置;提取运算符时,使用n[i++]先对n[i]进行检验再递增i,而不是直接检验n[i++]。
参考代码:
#include
#include
#include
bool isNum(char c)
{
return c >= '0' && c <= '9';
}
bool isOperator(char c)
{
return c == '+' || c == '-';
}
int main()
{
char n[11];
int right = 0;
while (scanf("%s", n) != EOF)
{
int a = 0, b = 0, c = 0;//重置等式三个变量
int length = strlen(n);
int i = 0;
// 提取第一个数字
while (isNum(n[i]))
{
a = a * 10 + (n[i] - '0');
i++;
}
// 提取运算符号
char operator = n[i++];
// 提取第二个数字
while (isNum(n[i]))
{
b = b * 10 + (n[i] - '0');
i++;
}
// 提取等号和第三个数字
if (n[i] == '=')
{
i++;
if (isNum(n[i])) {
while (i < length && isNum(n[i]))
{
c = c * 10 + (n[i] - '0');
i++;
}
} else if (n[i] == '?')
{
c = -1; // 埋个错误值
}
}
if (isOperator(operator) && c >= 0 && c <= 200)//运算判定
{
int result = (operator == '+') ? a + b : a - b;
if (c == result)
{
right++;
}
}
}
printf("%d\n", right);
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复