gpt4 book ai didi

c++ - 添加!运算符和 sqrt()、pow() 等到计算器示例应用程序

转载 作者:IT老高 更新时间:2023-10-28 12:44:01 24 4
gpt4 key购买 nike

我正在做 Stroustrup 新书 "Programming Principles and Practice Using C++" 中的练习并且想知道 StackOverflow 上是否有人做过并愿意分享知识?

具体说一下第6章和第7章开发的计算器。比如添加!操作符和sqrt()、pow()等问题。这些我都做过,但是我不知道我的解决方案是不是“好”的做事方式,Bjarne 的网站上也没有公布的解决方案。我想知道我是否走在正确的轨道上。也许我们可以为练习制作一个 wiki?

基本上我有一个 token 解析器。它一次从 cin 读取一个字符。它旨在标记 5*3+1 之类的表达式,并且非常适合。练习之一是添加一个 sqrt() 函数。所以我修改了标记化代码以检测“sqrt(”,然后返回一个表示 sqrt 的 Token 对象。在这种情况下,我使用 char 's'。其他人会这样做吗?如果我需要实现 sin() 怎么办? case 语句会变得困惑。

char ch;
cin >> ch; // Note that >> skips whitespace (space, newline, tab, etc.)

switch (ch) {
case ';': // For "print"
case 'q': // For "quit"
case '(':
case ')':
case '+':
case '-':
case '*':
case '/':
case '!':
return Token(ch); // Let each character represent itself
case '.':
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
{
cin.putback(ch); // Put digit back into the input stream
double val;
cin >> val; // Read a floating-point number
return Token('8', val); // Let '8' represent "a number"
}
case 's':
{
char q, r, t, br;
cin >> q >> r >> t >> br;
if (q == 'q' && r == 'r' && t == 't' && br == '(') {
cin.putback('('); // Put back the bracket
return Token('s'); // Let 's' represent sqrt
}
}

default:
error("Bad token");
}

最佳答案

  1. Stroustrup - Programming 上发布了一些解决方案随着时间的推移,还会有更多。

  2. 尝试仅使用本书迄今为止介绍的语言功能和图书馆设施来解决练习 - 真正的新手用户无法做任何其他事情。稍后再回来看看如何改进解决方案。

关于c++ - 添加!运算符和 sqrt()、pow() 等到计算器示例应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/871354/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com