Zamiana systemów liczbowych - Błąd konwersji - string

0

Witajcie !

Dopiero zaczynam "prawdziwą" przygodę z C++ ;) Na ferie nauczyciel zadał mi dosyć ciekawy problem. Mam napisać funkcję, która zamieni nam liczby w systemie dziesiętnym na jakikolwiek inny system z przedziału 2-16. Jedynym ograniczeniem są typy zmiennych do funkcji. Deklaracja ma wyglądać następująco :

string konwersja(int liczba, int podstawa)

Tak więc zabrałem się do roboty. Podwinąłem rękawy i jazda. Niestety. Na samym końcu jednak dopadł mnie błąd, brzmiący następująco:
"conversion from std::string*' to non-scalar type std::string' requested"
Błąd odnosi się do przedostatniej linii - "return wyjscie;".

Mój dotychczasowy kod (wiem, "trochę" chaotyczny) wygląda tak:

string konwersja(int liczba, int podstawa) {
    int b, c, n = 1, nowa_liczba = liczba;
    while(nowa_liczba = nowa_liczba / 10) n++;
    int a = 0;
    int reszta;
    int tablica[0];
    do{
        nowa_liczba = liczba / podstawa;
        reszta = liczba % podstawa;
        tablica[a] = reszta;
        liczba = nowa_liczba;
        a++;
    } while(liczba != 1);
    string wyjscie[a];
    tablica[a] = 1;
    for(b=a, c=0; b>=0, c<=a; b--, c++){
        switch(tablica[b])
        {
            case 0: wyjscie[c] = '0'; break;
            case 1: wyjscie[c] = '1'; break;
            case 2: wyjscie[c] = '2'; break;
            case 3: wyjscie[c] = '3'; break;
            case 4: wyjscie[c] = '4'; break;
            case 5: wyjscie[c] = '5'; break;
            case 6: wyjscie[c] = '6'; break;
            case 7: wyjscie[c] = '7'; break;
            case 8: wyjscie[c] = '8'; break;
            case 9: wyjscie[c] = '9'; break;
            case 10: wyjscie[c] = 'A'; break;
            case 11: wyjscie[c] = 'B'; break;
            case 12: wyjscie[c] = 'C'; break;
            case 13: wyjscie[c] = 'D'; break;
            case 14: wyjscie[c] = 'E'; break;
            case 15: wyjscie[c] = 'F'; break;
        }
    }
    return wyjscie;
}

Z góry dziękuję za wszelkie uwagi !
Pozdrawiam,
Jakub

0

Wyjście nie jest u ciebie stringiem, a tablicą stringów.

Edit:

poczytaj jeszcze raz o tworzeniu tablic, bo z tym to krucho.

0

Tu sa moje przykladowe konwersje, ktore ostatnio potrzebowalem. Tylko ja konweruje ze stringa na inta z powiedzmy bin na dec. Idea jest prosta ;)

int bin2dec(string bin)
{
  int result=0;
  int licznik=0;
  for(int i=bin.length()-1;i>=0;i--)
  {
      if(bin[i]=='1')
      {
          result+=pow(2,licznik);
          licznik++;
      }
      else if(bin[i]=='0')licznik++;
  }
  return result;
}

int hex2dec(string bin)
{
    int result=0;
    int licznik=0;
    for(int i=bin.length()-1;i>=0;i--)
    {
        if(isdigit(bin[i]))
        {
            result+=pow(16,licznik)*(bin[i]-48);
            licznik++;
        }
        else if(isalpha(bin[i]))
        {
            result+=(pow(16,licznik)*(tolower(bin[i])-87));
            licznik++;
        }
    }
    return result;
}
0

Ewentualnie dla twojej wersji cos w tym stylu reszte sam kombinuj.

string bin2dec(int liczba, int baza)
{
    string result;
    while(liczba!=0)
    {
        if(liczba%baza==0)
        {
            result= result + "0";
        }
        else if(liczba%baza==1)
        {
            result= "1" + result;
        }
        liczba=liczba/baza;
    }
    return result;
}
0
 int tablica[0];

WTF? tablica ma 0 (słownie: zero) elementów. Jakiekolwiek odwołanie do niej może generować błędy.

string wyjscie[a];

Nie możesz tak zrobić (abstrahując już że a = 0), dopóki a nie jest stałą. Poczytaj o tablicach dynamicznych

0

string wyjscie[a] oznacza, że stworzyłeś "a" stringów, gdzie a jest liczbą tych stringów.
Jak chcesz zwrócić go w funkcji musisz podać nr stringa np. return wyjscie[1]; Oczywiście pamiętaj, żeby przy tworzeniu stringa a nie było równe 0, gdyż tablica z zeroma elementami jest... nieistniejąca :)

A... Po co utrudniać sobie życie. Jak dostajesz do wejscia liczbę dzisiętną i chcesz zamienić ją na inne systemy liczbowe możesz użyć gotowej funkcji.

 
char* wyjscie;
int wejscie;
itoa(wejscie, wyjscie, 10); //zapisuje podaną liczbę do ciągu znaków  w systemie dziesiętnym
itoa(wejscie, wyjscie, 2); //zapisuje podaną liczbę do ciągu znaków w systemie dwójkowym (binarnym)
itoa(wejscie, wyjscie, 8); //zapisuje w systemie ósemkowym

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