gfdhy 2023-08-09 13:43 采纳率: 100%
浏览 10
已结题

请看一下这个代码的问题出在哪儿了


#include <iostream>
#include <string>
#include <map>
#include <fstream>

class ChatBot {
public:
    void chat() {
        loadKnowledgeBase();

        std::cout << "你好!我是你的聊天机器人。你想和我聊些什么?" << std::endl;

        while (true) {
            std::cout << "你: ";
            std::getline(std::cin, userInput);

            if (userInput == "退出") {
                saveKnowledgeBase();
                std::cout << "聊天机器人: 再见!" << std::endl;
                break;
            }

            std::cout << "聊天机器人: " << generateResponse(userInput) << std::endl;
        }
    }

private:
    std::string userInput;
    std::map<std::string, std::string> knowledgeBase;

    void loadKnowledgeBase() {
        std::ifstream file("knowledge_base.txt");
        std::string input;
        std::string response;

        while (std::getline(file, input) && std::getline(file, response)) {
            knowledgeBase[input] = response;
        }

        file.close();
    }

    void saveKnowledgeBase() {
        std::ofstream file("knowledge_base.txt");

        for (const auto& entry:knowledgeBase) {
            file << entry.first << std::endl;
            file << entry.second << std::endl;
        }

        file.close();
    }

    std::string generateResponse(const std::string& input) {
        if (knowledgeBase.count(input) > 0) {
            return knowledgeBase[input];
        } else {
            std::string response;
            std::cout << "聊天机器人: 对不起,我不知道如何回答这个问题。请告诉我一个合适的回答:" << std::endl;
            std::cout << "你: ";
            std::getline(std::cin, response);
            knowledgeBase[input] = response;
            return response;
        }
    }
};

int main() {
    ChatBot bot;
    bot.chat();
    return 0;
}

帮忙看一下,代码的问题出在哪儿了

  • 写回答

3条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-09 17:01
    关注

    【相关推荐】



    • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7789765
    • 这篇博客也不错, 你可以看下简易方式:自己写出来有价值的代码应用想出售使用权,但不想透露源代码如何做到?
    • 您还可以看一下 孙玖祥老师的图解数据结构与算法课程中的 左旋和右旋的代码实现小节, 巩固相关知识点
    • 除此之外, 这篇博客: 求解一个整数的位数并输出每一位上的数字中的 代码详解 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

      #include <stdio.h>
      #include <math.h>

      int GetFigures(int n)
      {
          if(n == 0)//do...while或者count = 1,再进行while循环
              return 1;
          int count = 0;
          while(n != 0)
          {
              n = n / 10;
              count++;
          }
          return count; 
      }
      void PrintReverse(int n)//逆序输出n的每一位数
      {
          if(n < 0)
              printf("-"),n=-n;
          if(n == 0)//同上do...while
              printf("0");
          while(n != 0)
          {
               printf("%d ",n % 10);
               n/=10;//丢弃个位数字
          }
          printf("\n");
      }
      //正序输出n的每一位数
      void PrintOrder(int n)
      {
          int count = GetFigures(n)-1;
          int power = (int)pow(10.0,count);
          do
          {
              printf("%d ",n/power);
              n %= power;
              power /= 10;
          }while(n != 0);
          /*for(int i = GetFigures(n)-1;i>=0;i--)//函数调用太多,效率不高
          {
              printf("%d  ",n/(int)pow(10.0,i));
              //pow函数一般返回的是double型,故在使用时,注意强制转化类型
              n %= (int)pow(10.0,i);
          }*/
          printf("\n");
      }

      int main()
      {
          PrintOrder(12345789);
          PrintOrder(0);
          PrintOrder(-12345789);
          PrintReverse(12345);
          PrintReverse(1);
          printf("%d\n",GetFigures(12345));
          printf("%d\n",GetFigures(123456789));
          printf("%d\n",GetFigures(0));
          printf("%d\n",GetFigures(-123456789));
          return 0;
      }



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月24日
  • 已采纳回答 8月16日
  • 创建了问题 8月9日