Xman


私信TA

用户名:dotcpp0640277

访问量:74

签 名:

初学者,请多指教

等  级
排  名 20788
经  验 685
参赛次数 0
文章发表 3
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:使用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 人评分

  评论区

  • «
  • »