Char 数组到数学方程

标签 c arrays parsing

我正在尝试从给定的字符数组中解析出数学方程,例如 char equation[255] = "4+4";我想将第一个数字复制到 long number1 ,运算符为 char oper第二个数字为long number2

我已经尝试过sscanf(equation, "%d%c%d", &number1, &oper, &number2);但它只获取第一个数字,无法提取运算符和第二个数字。

尝试过这个方法:

while (isdigit(equation[k]))
    {
        k++;
    }                   
oper = equation[k];

但仍然没有得到运算符(operator)的帮助。有没有更简单的方法来解析 C++ 中的方程?

最佳答案

将其变成 MCVE ...

#include <stdio.h>

int main()
{
    char * equation = "4+4";
    long number1, number2;
    char oper;
    int rc = sscanf( equation, "%d%c%d", &number1, &oper, &number2 );
    printf( "%d\n", rc );
    if ( rc == 3 )
    {
        printf( "%d - %c - %d\n", number1, oper, number2 );
    }
    return 0;
}

...给出...

3
4 - + - 4

按预期工作。 投票结束问题,请阅读我在答案开头给出的链接。

另外:

  • How to read / parse input in C? ,部分:
    • 请勿将 *scanf() 用于可能格式错误的输入
    • 当 *scanf() 未按预期工作时(如果您的输入字符串包含空格)

如果您确实想要使用 C++(如您的原始标签所示),则 Boost.Spirit满足您的解析需求。

关于Char 数组到数学方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36029983/

相关文章:

c - sleep 理发师算法 - 代码不执行

将 char 指针数组转换为 void 指针,然后再转换回来

c# - 如何询问字符串变量是否可以解析为int变量?

swift - 将文本添加到字符串

c - 跟踪/包装开放系统调用

c - 如何跟踪亚秒级时间

c - 找出最大公约数为 1 的 C 系统中可表示为整数的最大一对数

c++ - 你能用大括号在 C++ 的 return 语句中初始化数组吗?

php - 按数组值对多维数组进行排序

C++ 时区偏移到解析时间