写出上一个问题的c++代码
时间: 2024-10-27 13:11:42 浏览: 9
在C++中,你可以使用一个栈数据结构来模拟这个棒球得分过程。下面是一个简单的代码示例,它定义了一个`PointRecorder`类,包含了用于跟踪得分、添加分数和处理操作的函数:
```cpp
#include <iostream>
#include <string>
#include <stack>
using namespace std;
class PointRecorder {
private:
stack<int> scores; // 存储得分的栈
int prevScore; // 上一轮的得分
public:
// 添加一个得分并考虑操作
void addScore(const string& scoreStr) {
if (scoreStr == "C") {
if (!scores.empty()) {
scores.pop();
}
prevScore = -1;
} else if (isdigit(scoreStr)) {
int score = stoi(scoreStr);
scores.push(score);
prevScore = score;
} else { // 处理 "+" 或 "D"
int newScore;
if (scoreStr == "+") {
if (!scores.empty()) {
newScore = prevScore + scores.top();
} else {
newScore = 0;
}
} else { // "D"
if (!scores.empty()) {
newScore = prevScore * 2;
} else {
newScore = 0;
}
}
scores.push(newScore);
prevScore = newScore;
}
}
// 返回累计得分
int getTotalScore() {
int total = 0;
while (!scores.empty()) {
total += scores.top();
scores.pop();
}
return total;
}
};
int main() {
PointRecorder recoder;
recoder.addScore("5");
recoder.addScore("2");
recoder.addScore("C");
recoder.addScore("D");
recoder.addScore("+");
cout << "Total score: " << recoder.getTotalScore() << endl;
return 0;
}
```
当你运行这个程序,它会计算并打印出最后的累计得分。注意,这个代码没有处理输入验证,实际应用中你需要检查输入的有效性。同时,这里使用了栈的数据结构,使得“C”操作能够回溯并移除最近的一个得分。
阅读全文