Skocz do zawartości

Problem z pewną funkcją.


Rekomendowane odpowiedzi

Opublikowano

    std::string * I = new std::string[(code.size())/2];
    std::string * II = new std::string[(code.size())/2];

To nie jest przypadkiem alokacja tablicy stringów (a nie samego stringa)? Bo jeżeli tak to normalne, że:

 

I[i] = code[i];

nie będzie działać, skoro I[] ma typ std::string, a code[] char.

 

Druga sprawa to co Will powiedział, referencje w argumentach.

 

Trzecia:

for (unsigned int i = 0; i <= code.size()/2; i += 2)

Oznacza skacz co dwa znaki do momentu aż osiągniesz połowę długości stringa. Czyli w stringach I i II znajdzie się ćwierć tekstu głównego. Chyba nie o to chodziło. Wg mnie musisz zmienić warunek na i < code.size().

 

Cztery: str.resize(code.size()/2); powinno przyśpieszyć działanie. W końcu klasa stringa wie ile tego będzie.

 

Pięć: Tak jak Will powiedział, zmień w warunkach pętli <= na <, bo wychodzisz poza wielkość tablicy.

Opublikowano
#include <string>

const std::string GDstd = "GADERYPOLUKIÓŁgaderypolukiół";






std::string translateLC(std::string* a, std::string* code);







std::string translateLC(std::string a, std::string code)
{
    // Przygotowanie klucza.
    std::string bufor;
    std::string * I = new std::string[(code.size())/2];
    std::string * II = new std::string[(code.size())/2];
    for (unsigned int i = 0; i < code.size()/2; i += 2)
    {
        I[i] = code[i];
        II[i+1] = code[i+1];
    }
    // Zamiana znak po znaku.
    for (unsigned int i=0; i < a.size(); i+=1)
    {
        bufor = a[i];
        for (unsigned int l=0; l < code.size()/2; l+=1)
        {
            if (bufor == I[l])
            {
                a.erase(l, 1);
                a.insert(l, II[l]);
               
            }
            else if (bufor == II[l])
            {
                a.erase(l, 1);
                a.insert(l, I[l]);
                
            }
        }
    }
        delete [] I;
        delete [] II;
        return a;
            
            


}

tak wygląda teraz biblioteka, nie pojawiają się żadne błędy, ale nie tłumaczy tekstu kiedy wpisałbym: "Rafał" powinno wyjść "Rgfgó" a tak się nie dzieje

Opublikowano

std::string translateLC(std::string a, std::string code)
{
    // Przygotowanie klucza.
    std::string bufor;

    std::string * I = new std::string[(code.size())/2];
    std::string * II = new std::string[(code.size())/2];
    for (unsigned int i = 0; i < code.size(); i += 2)
    {
        I[i] = code[i];
        II[i+1] = code[i+1];
    }
    // Zamiana znak po znaku.
    for (unsigned int i=0; i < a.size(); i+=1)
    {
        bufor = a[i];
        for (unsigned int l=0; l < code.size(); l+=1)
        {
            if (bufor == I[l])
            {
                a.erase(l, 1);
                a.insert(l, II[l]);
               
            }
            else if (bufor == II[l])
            {
                a.erase(l, 1);
                a.insert(l, I[l]);
                
            }
        }
    }
        delete [] I;
        delete [] II;
        return a;
            
            


}

 

Wprowadź to o co byłeś proszony, dalej masz stringi na stercie, a potem przeanalizuj swój kod.

 

edit: Poza tym włącz debugger i przeleć dokładnie a na pewno znajdziesz co jest nie tak.

Opublikowano

No to szybko się poddajesz, ile czasu spędziłeś nad tym kodem? Ile godzin myślałeś gdzie tu jest błąd (a ile zanim napisałeś o nim na forum). Programistą nie zostajesz, jeśli tylko nauczysz się składni jakiegoś języka.

Opublikowano

Megatutorial - dzięki niemu zacząłem programować.

 

Zastanawiać się...? Z moimi umiejętnościami może w ogóle nie zauważę błędu. Może kiedyś powiem "aaaaaaaa" to tu był błąd.

Opublikowano

Cóż, ja tak mam prawie z każdym poważniejszym błędem. Tylko trzeba jednak go szukać i siedzieć nad nim (albo obok niego :P ).

 

A tak wogóle: błędy zostały już wymienione, wystarczy je naprawić.

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...