【问题标题】:How to make Account user generator c++ (problem: making array of objects and dynamically expanding it)如何制作Account用户生成器c++(问题:制作对象数组并动态扩展)
【发布时间】:2019-03-04 21:26:30
【问题描述】:

我 15 岁,我搬到了瑞典。我没有时间学习 C++,因为我需要学习这门语言,但后来(可能几个月),我将继续阅读 300 页的书(这是 500 页,但在 3 年内我(主要通过 YouTube)学习了那本书的200页)。我现在不太愿意学习向量,所以如果你给我关于向量的答案,如果你能向我解释它是如何工作的,或者给我链接,它“简单”地解释了向量。

无论如何,说了这么多,这是我的问题: 我在 C++ 程序中构建,一开始它有 1 个对象(NAobj),它将存储您的姓名和年龄,然后您可以选择选项以继续创建另一个帐户,依此类推。当您第一次运行该程序时,它会生成 Aobj 数组对象,并在您每次想要创建新帐户时扩展它。但我就是无法让它工作。

我找到了如何扩展对象数组,但是,正如我所说,它并没有真正起作用......

How to expand an array dynamically in C++? {like in vector }

这是我的代码:

#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 - 新帐户对象(帐户名称的“临时”存储,以后可能不会使用...)

Program Output

附言 对不起我的英语不好,我知道我的程序很乱,但我懒得整理它。

【问题讨论】:

标签: arrays object visual-c++ dynamic


【解决方案1】:

解决问题的最简单方法是使用向量来存储对类对象的引用。我建议去学习如何使用向量的“麻烦”。它们并不像您可能担心的那样难以理解,并且绝对是最简单的动态数据结构之一。 这可能会有所帮助:https://www.geeksforgeeks.org/vector-in-cpp-stl/

【讨论】:

  • 感谢您的快速回复,我查了一下,其实很简单。更改了几行,现在效果很好。该网站进入我的 -yes yes- 列表。
猜你喜欢
  • 2012-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多