Skocz do zawartości

Problem z pewną funkcją.


raVVal

Rekomendowane odpowiedzi

    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.

Odnośnik do komentarza
Udostępnij na innych stronach

#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

Odnośnik do komentarza
Udostępnij na innych stronach

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.

Odnośnik do komentarza
Udostępnij na innych stronach

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ę...