Dodanie znaku do stringa

Odpowiedz Nowy wątek
2019-03-14 19:01
0

Mam napisać gotową funkcję która doda znak podany do stringa co 3 znak.
Mój kod

#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
char* wstaw(const char* zrodlo, char symbol)
{
    int n = strlen(zrodlo);
    int rozmiar = n + floor(n / 3) + 1;
    int i, j = 0;
    char* t = new char[rozmiar];
    for (j = 0; j < (rozmiar && zrodlo[i]); j++) {
        if (j % 3 == 0) {
            t[j] = symbol;
        }
        else {
            t[j] = zrodlo[i];
            i++;
        }
    }
    t[j] = '\0';
    return t;
}
int main(int argc, char* argv[])
{
    char* a = NULL;
    if (argc != 3) {
        cerr << "Nieprawidlowa ilosc przekazanych argumentow(3)!" << endl;
        cout << "Wymagane argumenty to:./nazwa,napis,symbol" << endl;
        return -1;
    }
    else {
        a = wstaw(argv[1], argv[2][0]);
        cout << a;
        if (a)
            delete[] a;
        a = 0;
    }
    return 0;
}

Program się kompiluje,ale nie działa przy uruchomieniu,coś mi się wydaje że jest z tymi rozmiarami nie rozumiem tego zbyt dobrze.
Mógłby mi ktoś wytłumaczyć dlaczego int rozmiar ma taki wzór bo akurat ten fragment jest przepisany z zajęć.

edytowany 1x, ostatnio: kq, 2019-03-14 19:29
Dlaczego sygnujesz to C++? To zwykle C ze streamem zamiast FILE - AnyKtokolwiek 2019-03-14 20:54

Pozostało 580 znaków

2019-03-14 20:04
0

Nie chcę takiego kodu,bo nie mogę tworzyć żadnych templatów wiem,że to jest jakiś jeden mały błąd wystaczy go poprawić i będzie działać.

nie kodź w stylu C, ale użyj C++, czyli std::string. Nie będziesz musiał sam zarządzać pamięcią. - MarekR22 2019-03-14 20:07
Mam taki wymóg to jest na zajęcia - FrageN 2019-03-14 20:24
tak się domyślałem. Szczerze dałem taki kod celowo. Taki gotowiec wymagający myślenia. Jak poprawisz dosłownie parę linijek, będzie spełniać wymagania na zajęcia. - MarekR22 2019-03-14 20:59

Pozostało 580 znaków

2019-03-14 20:56
0

Dlaczego sygnujesz to C++? To zwykle C ze streamem zamiast FILE?

Praktyka alokowania w funkcji i zwalniania poza funkcją jest podatna na błedy. Użycie C++ std:string upraszcza ten temat radykalnie

Pozostało 580 znaków

2019-03-14 21:26
0

@FrageN: Używasz niezainicjalizowanej zmiennej i.
Warunek j % 3 ==0 będzie spełniony również dla j == 0, czyli na samym początku. Dla wywołania wstaw("aaaaaaaaaaaaa", '1') dostaniesz 1aa1aa1aa...

"Osadź" pętle na indeksach tekstu wejściowego, będzie łatwiej.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0