0
#include <iostream>
#include <Windows.h>
#include <String>
#include <vector>
#include <fstream>
#include <math.h>
#include <ctime>

using std::cout;
using std::cin;
using std::vector;
using std::string;
using std::ofstream;
using std::ifstream;
using std::endl;
using std::stringstream;
using std::cerr;

class Vault {
    string fN;
    string sN;
public:
    Vault(string a) {
        getWord(a, this->fN);
        getWord(a, this->sN);
    }
    string getAll() {
        return fN + " " + sN;
    }
private:
    //ну что то типо split на джаве только по другому (не обращайте внимания)
    bool getWord(string& line, string& word, char delim1 = ' ', char delim2 = '\n') {
        if (line.empty())return false;
        while (line[0] == delim1 or line[0] == delim2) {
            line.erase(0, 1);
        }
        if (line.empty())return false;
        while (line[line.size() - 1] == delim1 or line[line.size() - 1] == delim2) {
            line.pop_back();
        }
        if (line.empty())return false;
        int i = 0; word = "";
        for (auto c : line) {
            if (c == delim1 or c == delim2)break;
            i++;
        }
        for (int j = 0; j < i; j++) {
            word.push_back(line[j]);
        }
        string newLine;
        for (; i < line.size(); i++) {
            newLine.push_back(line[i]);
        }
        line = newLine;
        return true;
    }
};

int main() {
    vector<Vault> arr;
    int n; cin >> n;
    for (int i = 0; i < n; i++)
    {
        string a;
        std::getline(cin, a);
        arr.push_back({ a });
    }
    for(auto i : arr)
    {
        cout << i.getAll() << '\n';
    }
}

Вопрос в том почему если я хочу создать 4 класса, программа даёт создать только 3 (начиная с индекса 1) а под индексом 0 у меня лежит объект с неопределёнными полями?

insolor
  • 49,104
Rups1ķ
  • 3
  • 2
  • Помечайте ответ как принятый и жмите стрелку вверх :) – Виктор Nov 18 '22 at 05:48
  • проверьте реализацию Vault::getWord . Я не понял что вы хотели сделать, но, по моему, вы запутались в реализации . Еще раз убедитесь, что вам точно нужно в классе иметь две строковые объекты, а не одну и не нужно ли иметь для константных объектов метод getAll?... – AR Hovsepyan Nov 18 '22 at 10:51

1 Answers1

-3

Замените

int n; cin >> n;
for (int i = 0; i < n; i++)
{
    string a;
    std::getline(cin, a);
    arr.push_back({ a });
}

на

int n; cin >> n;
while(n--)
{
    string a;
    cin >> a;
    arr.push_back({ a });
}
Виктор
  • 2,119