社区讨论
求大佬改进ai
灌水区参与者 4已保存回复 12
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 12 条
- 当前快照
- 1 份
- 快照标识符
- @lxg90qie
- 此快照首次捕获于
- 2024/06/15 23:04 2 年前
- 此快照最后确认于
- 2024/06/16 10:52 2 年前
CPP
#include <iostream>
#include <string>
#include <map>
#include <sstream>
#include <stack>
#include <regex>
std::map<std::string, std::string> responses = {
{"你好", "你好!"},
{"再见", "再见!"},
{"谢谢", "不客气!"},
{"你叫什么名字", "我是一个聊天机器人。"}
};
std::map<std::string, std::string> feedKnowledge;
std::string getResponse(const std::string& input) {
auto it = responses.find(input);
if (it != responses.end()) {
return it->second;
} else {
return "对不起,我不明白您的问题。";
}
}
double calculate(const std::string& input) {
std::stack<double> values;
std::stack<char> operators;
std::regex re("([-+]?[0-9]*\\.?[0-9]+|[-+])");
std::sregex_iterator it(input.begin(), input.end(), re);
std::sregex_iterator end;
while (it != end) {
std::string token = it->str();
if (token == "+" || token == "-" || token == "*" || token == "/") {
while (!operators.empty() && operators.top() != '(') {
double value2 = values.top();
values.pop();
double value1 = values.top();
values.pop();
char op = operators.top();
operators.pop();
if (op == '+') {
values.push(value1 + value2);
} else if (op == '-') {
values.push(value1 - value2);
} else if (op == '*') {
values.push(value1 * value2);
} else if (op == '/') {
values.push(value1 / value2);
}
}
operators.push(token[0]);
} else if (token == "(") {
operators.push(token[0]);
} else if (token == ")") {
while (!operators.empty() && operators.top() != '(') {
double value2 = values.top();
values.pop();
double value1 = values.top();
values.pop();
char op = operators.top();
operators.pop();
if (op == '+') {
values.push(value1 + value2);
} else if (op == '-') {
values.push(value1 - value2);
} else if (op == '*') {
values.push(value1 * value2);
} else if (op == '/') {
values.push(value1 / value2);
}
}
if (!operators.empty() && operators.top() == '(') {
operators.pop();
}
} else {
values.push(std::stod(token));
}
++it;
}
while (!operators.empty()) {
double value2 = values.top();
values.pop();
double value1 = values.top();
values.pop();
char op = operators.top();
operators.pop();
if (op == '+') {
values.push(value1 + value2);
} else if (op == '-') {
values.push(value1 - value2);
} else if (op == '*') {
values.push(value1 * value2);
} else if (op == '/') {
values.push(value1 / value2);
}
}
return values.top();
}
void feedKnowledge() {
std::string key, value;
std::cout << "请输入知识关键词:";
std::cin >> key;
std::cin.ignore();
std::cout << "请输入知识内容:";
std::getline(std::cin, value);
feedKnowledge[key] = value;
}
int main() {
std::string input;
std::cout << "请输入您的问题:";
while (std::getline(std::cin, input)) {
if (input == "F10") {
feedKnowledge();
} else {
size_t pos = input.find("=");
if (pos != std::string::npos) {
std::string expression = input.substr(0, pos);
double result = calculate(expression);
feedKnowledge[expression] = std::to_string(result);
std::cout << "机器人:" << result << std::endl;
} else {
std::string response = getResponse(input);
std::cout << "机器人:" << response << std::endl;
}
}
std::cout << "请输入您的问题:";
}
return 0;
}
报错:void freedKnowledge()'redeclared as different kind of entity
no match for call to '(std::_cxx11::basic_string,std::_cxx11::basic_string >)()'
自己也不会练,求大佬调整
回复
共 12 条回复,欢迎继续交流。
正在加载回复...