SHOW:
|
|
- or go back to the newest paste.
| 1 | string* terel(const string* nyaj, unsigned& nyajhossz) const | |
| 2 | {
| |
| 3 | - | if (nyaj == NULL || nyajhossz == 0) {
|
| 3 | + | if (nyaj == nullptr || nyajhossz == 0) {
|
| 4 | nyajhossz = 0; | |
| 5 | return nullptr; | |
| 6 | } | |
| 7 | ||
| 8 | - | unsigned kapacitas = this->terelo_kapacitas; |
| 8 | + | string *array = new string[nyajhossz]; // most az összes array[] elem üres string |
| 9 | - | string *array = new string[nyajhossz]; |
| 9 | + | unsigned ujhossz = 0; // ez az új tömb utolsó birkáját is tartalmazó hossz (most még nincs egy se) |
| 10 | ||
| 11 | - | int hova; // hova kell rakni a következő terelt birkát az array-ba |
| 11 | + | int hova = 0; // hova kell rakni a következő terelt birkát az array-ba |
| 12 | - | int mit = 0; // hol van most az a birka a nyaj-ban |
| 12 | + | int mit; // hol van most az a birka a nyaj-ban |
| 13 | - | for (hova = 0; hova <= kapacitas; hova++) { // csak az első "kapacitás" darab birkát tereljük
|
| 13 | + | for (mit = 0; mit < nyajhossz; mit++) { // végigmegyünk az összes helyen
|
| 14 | - | while (mit < nyajhossz && nyaj[mit] == "") { // az üres heleyekt lépjük át mit-tel
|
| 14 | + | if (nyaj[mit] == "") |
| 15 | - | if (kapacitas >= 0) // hmm, ezt nem tudom, kell-e nézni? Szerintem nem... |
| 15 | + | continue; // az üres helyekkel nem kell semmit se csinálni |
| 16 | - | mit++; |
| 16 | + | // itt egy birka van! |
| 17 | - | } |
| 17 | + | |
| 18 | - | if (mit == nyajhossz) |
| 18 | + | if (hova < terelo_kapacitas) { // ha van még kapacitás, akkor...
|
| 19 | - | break; // nem volt már újabb birka |
| 19 | + | array[hova] = nyaj[mit]; // ... terelünk, vagyis előre rakjuk a birkát |
| 20 | ujhossz = hova + 1; | |
| 21 | - | array[hova] = nyaj[mit]; // terelünk, előre kerül a birka |
| 21 | + | hova++; |
| 22 | - | kapacitas--; // ezt miért csökkented? |
| 22 | + | } else {
|
| 23 | - | mit++; |
| 23 | + | array[mit] = nyaj[mit]; // egyébként ugyanott hagyjuk (persze át kellett rakni a mi tömbünkbe) |
| 24 | ujhossz = mit + 1; | |
| 25 | } | |
| 26 | - | for (int i = hova; i < nyajhossz; i++) { // Ennek a teljes ciklusnak nincs sok értelme, eleve "" minden, amibe nem írtál semmit
|
| 26 | + | |
| 27 | - | if (kapacitas >= 0) { // ennek a szerepét sem értem
|
| 27 | + | // Ez működik akkor is, ha a nyaj végén lennének lyukak (a feladat szerint nincsenek), |
| 28 | - | array[i] = ""; |
| 28 | + | // vagy ha nincs egyetlen egy birka sem (de a nyajhossz nem 0) |
| 29 | - | kapacitas--; |
| 29 | + | // Nem kell ilyen feltételekkel működni, de így hibatűrőbb a kód. |
| 30 | - | } |
| 30 | + | |
| 31 | nyajhossz = ujhossz; | |
| 32 | - | // A kapacitas-on felüli birkákat itt a végén nem tetted át az array-ba! Azért nem kaptál max pontot |
| 32 | + | |
| 33 | } |