C编程:输出基于文本的数学问题的结果



在学校,我目前正在学习C。来自Javascript,我正在努力适应C的编写方式。语法可能有点混乱。我检查了一下,有很多过时的函数是我老师用来举例的。

我的问题是基于表达式匹配。

让我们假设我有一个这样的数学问题:

If Hanna has 100 apples and John 32 apples, then what is the sum?

如何告诉程序将句子解释为1+2,然后输出结果?

在javascript中,我通常使用正则表达式,但在C中,这真的很难实现或理解,因为regex不是标准功能。

第一个:printf(A operation B)

我需要迭代字符串的每个字母,并检查是否有任何字母包含0-9。如果找到匹配,则第一个数字存储在变量A中,第二个数字存储到变量B中。如果找到sum,则将+存储在运算变量中。因此,printf中的变量被赋值,我得到了结果。

现在,从技术上讲,我如何在C中做到这一点?

我假设如下:-只需读取一行。-这行只有两个数字。-操作的类型由一组已知的单词表示。例如,"one_answers"、"乘"等等

伪代码为:

  • 读取整行并将其存储在字符串中(在C中,是一个类型为char*的变量)
  • 读第一个数字"A"
  • 读取第一个数字"B"
  • 把字符串转换成数字。您可以使用标准函数"atoi"
  • 做运算(求和、乘法等)

为了计算结果,在C中必须使用条件块。类似的东西:

char * operator;
if (strcmp("sum", operator) == 0)
  result = A + B;
else if (strcmp("multiplication", operator) == 0)
  result = A * B;
..............
..............
printf("nThe result is %dn", sum);

NO,atoi没有过时。

但是,如果您处理的是非常大的数字、使用10以外的基数(非十进制值)或需要执行错误检查,则应使用strtol

num = atoi(str);

相当于

strtol(str, NULL, 10);

对于大多数情况,

Lundin是一位非常有知识的C程序员,他在atoi()中说——字符串到int,

"atoi没有被否决,您的源代码不正确。当前C标准ISO 9899:2011中没有任何内容表明这一点(例如,请参阅第6.11章未来的语言说明),早期标准中也没有任何内容。"

为了完整起见,我建议你继续阅读他的答案,尽管这不是公认的答案,但我确实认为这是最全面的答案。

在许多情况下,您会发现atoi函数,但了解strtol也很好。

最新更新