Как создать пользовательский генератор учетных записей c ++ (проблема: создание массива объектов и его динамическое расширение) - PullRequest
0 голосов
/ 29 сентября 2018

Мне 15 лет, и я переехал в Швецию.У меня нет времени изучать c ++, потому что мне нужно выучить язык, но позже (вероятно, через несколько месяцев) я продолжу работу с книгой на 300 страниц (это 500, но через 3 года я узнал (в основном через YouTube) о200 страниц этой книги).Я не хочу сейчас изучать вектор, поэтому, если вы дадите мне ответ с вектором, не могли бы вы объяснить мне, как он работает, или дать ссылку, где он "просто" объясняет вектор.

В любом случаеПосле того, как все сказано и сделано, вот моя проблема: я собираю программу на c ++, которая в начале имеет 1 объект (NAobj), в котором будут храниться ваши имя и возраст, а затем вы можете выбрать опцию, чтобы продолжитьсоздать другую учетную запись и так далее.При первом запуске этой программы она создает массив Aobj и расширяет его каждый раз, когда вы хотите создать новую учетную запись.Но я просто не могу заставить его работать.

Я нашел, как я могу расширить массив объектов, но, как я уже сказал, это не реально работает ...

Как динамически расширить массив в C ++?{как в векторе}

Вот мой код:

#include <iostream>
#include <string>
#include <Windows.h>

using namespace std;
int AccountFinder(string findName, string accountNames);



class Account
{
public:
    Account()
    {

    }

    ~Account()
    {

    }

    string name = "-ERROR NAME-";
    int age = 18;


private:

};

Account NAobj;
int Asize = 1;

string AName;
string Iname;

int ASelector;

int main() {
    Account *Aobj = new Account[Asize];
    while (Iname.empty()) {
        cout << "Name: #";
        getline(cin, Iname);
        if (Iname.empty())
        {
            cout << '\a' << endl;
            MessageBox(NULL, "No name found\nPlease enter name", "Error 01", MB_ICONERROR);
            system("cls");
        } 
        else if (Iname == " ") {
            cout << '\a' << endl;
            MessageBox(NULL, "Non suported name", "Error 02", MB_ICONERROR);
            system("cls");
            Iname.clear();
        }
        else {
            string a;
            cout << "Crete account? y\\n #";
            getline(cin, a);
            if (a == "y") {
                AName += Iname;
                ////generatin account
                NAobj.name = Iname;
                Account *TAobj = new Account[Asize];
                if (Asize == 1) {
                    copy(Aobj, Aobj + Asize - 1, TAobj);
                    delete[] Aobj;
                    Aobj = TAobj;
                    copy(Aobj, Aobj + Asize - 1, &NAobj);
                }
                else {
                    copy(Aobj, Aobj + Asize - 1, TAobj);
                    copy(&NAobj, &NAobj, (TAobj + Asize - 1));
                    delete[] Aobj;
                    Aobj = TAobj;
                }

                ////
                AName += " ";
                cout << "Want to continue? y\\n #";
                getline(cin, a);
                if (a == "y") {
                    system("cls");
                    Iname.clear();
                }
                else {
                    AName.resize(AName.size() - 1);
                }
                Asize++;
            }
            else {
                cout << "Want to continue? y\\n #";
                getline(cin, a);
                if (a == "y") {
                    system("cls");
                    Iname.clear();
                }
                else {
                    AName.resize(AName.size() - 1);
                }
            }
        }
    }
    Iname.clear();
    cout << ">" << AName << "<" << endl;
    cout << AName << endl;
    string name;
    cin >> name;
    int ANumber = AccountFinder(name, AName);
    if(ANumber != -1)
        cout << ANumber << endl;
    else
        cout << "no account name: >" << name << "< found" << endl;*/
    cout << endl;
    system("pause");
}



int AccountFinder(string findName, string accountNames) {

    string compareName;
    int Account = 0;
    bool space = TRUE;
    int startPos = 0;
    int a = 0;

    while (1) {
        while (1) {
            if (accountNames.at(a) == ' ') {
                break;
            }
            else
                a++;
            if (a == accountNames.size() - 1)
                return -1;
        }
        compareName.resize(a - startPos);
        for (int b = startPos; b < a; b++) {
            compareName.at(b - startPos) = accountNames.at(b);
        }
        if (findName == compareName) {
            return Account;
        }
        a++;
        startPos = a;
        if (Account > 0) {
            1;
        }
        Account++;
    }
}

Asize - Размер счета (указать размер массива)

Aobj - Объект учетной записи (массив объектов учетной записи)

NAobj - Новый объект учетной записи («временное» хранилище для имени учетной записи, вероятно, не буду использовать его позже ...)

Вывод программы

ps Извините за мой плохой английский, и я знаю, что моя программа запутана, но мне лень ее приводить в порядок.

1 Ответ

0 голосов
/ 29 сентября 2018

Самое простое решение вашей проблемы - использовать вектор для хранения ссылок на объекты класса.Я рекомендую перейти к «проблеме» в изучении использования векторов.Их не так сложно понять, как вы могли бы опасаться, и, безусловно, это одна из самых простых динамических структур данных.Это может помочь: https://www.geeksforgeeks.org/vector-in-cpp-stl/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...