Member 13989128 Ответов: 2

Как мне преобразовать следующий код C++ в C online, поскольку я ничего не знаю о C++?


Преобразуйте этот код в C, так как я не знаю синтаксиса языка C.

Что я уже пробовал:

#include <iostream>
#include <string.h>
#include <vector>
#include <ctime>
#include<stdlib.h>

const int MAX_RESP = 3;

typedef std::vector<std::string> vstring;

vstring find_match(std::string input);
void copy(char *array[], vstring &v);


typedef struct {
    char *input;
    char *responses[MAX_RESP];
}record;

record KnowledgeBase[] = {
    {"WHAT IS YOUR NAME",
    {"MY NAME IS CHATTERBOT2.",
     "YOU CAN CALL ME CHATTERBOT2.",
     "WHY DO YOU WANT TO KNOW MY NAME?"}
    },

    {"HI",
    {"HI THERE!",
     "HOW ARE YOU?",
     "HI!"}
    },

    {"HOW ARE YOU",
    {"I'M DOING FINE!",
    "I'M DOING WELL AND YOU?",
    "WHY DO YOU WANT TO KNOW HOW AM I DOING?"}
    },

    {"WHO ARE YOU",
    {"I'M AN A.I PROGRAM.",
     "I THINK THAT YOU KNOW WHO I'M.",
     "WHY ARE YOU ASKING?"}
    },

    {"ARE YOU INTELLIGENT",
    {"YES,OFCORSE.",
     "WHAT DO YOU THINK?",
     "ACTUALY,I'M VERY INTELLIGENT!"}
    },

    {"ARE YOU REAL",
    {"DOES THAT QUESTION REALLY MATERS TO YOU?",
     "WHAT DO YOU MEAN BY THAT?",
     "I'M AS REAL AS I CAN BE."}
    }
};

size_t nKnowledgeBaseSize = sizeof(KnowledgeBase)/sizeof(KnowledgeBase[0]);


int main() {
    srand((unsigned) time(NULL));

    std::string sInput = "";
    std::string sResponse = "";

    while(1) {
        std::cout << ">";
        std::getline(std::cin, sInput);
        vstring responses = find_match(sInput);
        if(sInput == "BYE") {
            std::cout << "IT WAS NICE TALKING TO YOU USER, SEE YOU NEXTTIME!" << std::endl;
            break;
        }
        else if(responses.size() == 0)  {
            std::cout << "I'M NOT SURE IF I  UNDERSTAND WHAT YOU  ARE TALKING ABOUT." << std::endl;
        }
        else {
            int nSelection = rand()  % MAX_RESP;
            sResponse =   responses[nSelection]; std::cout << sResponse << std::endl;
        }
    }

    return 0;
}

// make a  search for the  user's input
// inside the database of the program
vstring find_match(std::string  input) {
    vstring result;
    for(int i = 0; i < nKnowledgeBaseSize;  ++i) {
        if(std::string(KnowledgeBase[i].input) == input) {
            copy(KnowledgeBase[i].responses, result);
            return result;
        }
    }
    return result;
}

void copy(char  *array[], vstring &v) {
    for(int i = 0;  i < MAX_RESP; ++i) {
        v.push_back(array[i]);
    }
}

2 Ответов

Рейтинг:
2

OriginalGriff

Цитата:
Преобразуйте этот код в C, так как я не знаю синтаксиса языка C.
Нет. Мы не являемся службой преобразования кода, и мы здесь не для того, чтобы делать вашу домашнюю работу: она установлена не просто так. Она существует для того, чтобы вы думали о том, что вам сказали, и пытались понять это. Он также существует для того, чтобы ваш наставник мог определить области, в которых вы слабы, и сосредоточить больше внимания на корректирующих действиях.

Попробуйте сами, возможно, вы обнаружите, что это не так сложно, как вы думаете!

Если вы столкнетесь с конкретной проблемой, то, пожалуйста, спросите об этом, и мы сделаем все возможное, чтобы помочь. Но мы не собираемся делать все это для вас!

Но я дам вам небольшой совет бесплатно: хорошее решение C++, которое, кажется, отвечает вашему домашнему заданию, не приведет к хорошему решению C. C++ является надмножеством C и работает на совершенно другой основе. Это все равно, что купить двигатель Mustang для вашего Fiat 500 и ожидать, что он сразу же вставится и сделает хорошую машину ...


Рейтинг:
1

Rick York

На самом деле это не вопрос синтаксиса. Вы просто не можете использовать ничего из стандартной библиотеки c++. Вы должны использовать вещи из стандартной библиотеки C, такие как printf и strcmp. Вы также должны использовать необработанные текстовые буферы и указатели. Еще одна вещь - текстовые строки должны быть объявлены как "const char *".