Konwersja typów

0

Witam mam 2 funkcje:

void test1(char *wynik, char *s);

oraz

double licz(string test[],int wielkosc);

i mój problem jest taki, że nie wiem jak zmienić ten wynik z pierwszej funkcji na string żeby można go było użyć jako test[] po prostu chce prze-konwertować char*wynik na string test[] ktoś byłby w stanie mi pomóc ?

0

a

test=wynik; 

nie działa?

0

błąd: incompatible types in assignment of 'char*' to 'std::string [(((sizetype)(((ssizetype)wielkosc) + -1)) + 1)] {aka std::basic_string<char> [(((sizetype)(((ssizetype)wielkosc) + -1)) + 1)]}'

1
double licz(string test,int wielkosc);
0

no faktycznie....

0

Wtedy nie będzie mi poprawie działało licz (to jest funkcja do liczenia ONP)

0

W takim razie powiedz dokładnie co te funkcje mają robić/pokaż więcej kodu.

0
double MainWindow::onp_licz(string test[],int wielkosc){
        double S[wielkosc],wynik;      // stos
        int p = 0;            // wskaźnik stosu
        string e;             // element wyrażenia ONP
        double v1, v2;         // argumenty operacji
        stringstream ss;      // strumień łańcuchowy
        int i = 0;
        while (true)           // w pętli przetwarzamy wyrażenie ONP
        {
            e = test[i++];
            if (e == "=") break; // sprawdzamy koniec wyrażenia

            ss.str("");         // usuwamy wszelki tekst ze strumienia
            ss.clear();         // czyścimy błędy konwersji z poprzednich wywołań
            ss << e;            // odczytany element umieszczamy w strumieniu

            if (ss >> v1)        // konwertujemy na liczbę i sprawdzamy, czy nie było błędu
                // liczba
                S[p++] = v1;      // umieszczamy ją na stosie

            else
            {                   // operator
                v2 = S[--p];      // pobieramy ze stosu dwa argumenty
                v1 = S[--p];
                switch (e[0])      // wykonujemy operacje wg operatora
                {
                case '+': v1 += v2; break;
                case '-': v1 -= v2; break;
                case '*': v1 *= v2; break;
                case '/': v1 /= v2; break;
                }
                S[p++] = v1;      // wynik umieszczamy na stosie
            }
        }
        wynik = S[--p];
        return wynik;
} 
void MainWindow::konwerterONP(char *wynik, char *s)
{
    char x, y;

    while (x = *s++) {                                     /* krok 1 */
        if (((x >= '0') && (x <= '9')) || (x == '.')) {    /* krok 2 */
            /* kopiowanie calej liczby z wejscia na wyjscie */
            do
                *wynik++ = x;
            while (x = *s, (((x >= '0') && (x <= '9')) || (x == '.')) && s++);
            *wynik++ = ' ';


                                   /* krok 1 */
   } else if (((x >= 'A') && (x <= 'Z')) ) {    /* krok 2 */
         /* kopiowanie calej liczby z wejscia na wyjscie */
     do
        *wynik++ = x;
    while (x = *s, (((x >= 'A') && (x <= 'Z'))) && s++);
   *wynik++ = ' ';


    } else if (x == '(')                               /* krok 3 */
            push((double)'(');

    else if (x == ')')                                 /* krok 4 */
            while ((y = (char)pop()) != '(')
                *wynik++ = y, *wynik++ = ' ';

    else {                                             /* krok 5 */
            while (y = (char)pop(),
                   y && ((y == '^') ||
                         ((y == '*') || (y == '/')) && (x != '^') ||
                         ((y == '+') || (y == '-')) && (x != '*') &&
                                           (x != '/')&& (x != '^')))
                *wynik++ = y, *wynik++ = ' ';

            push((double)y);
            push((double)x);
        }
    }

    while (x = (char)pop())                                /* krok 6 */
        *wynik++ = x, *wynik++ = ' ';

    *wynik = '\0';    /* zakonczenie lancucha wyjsciowego */
} 

jedna funkcja zmienia na zapis ONP np 2+2= zmienia na 2 2 + =
zaś druga liczy np z 2 2 + = wynik jest 4

 char* sy = new char;
    char* wy = new char;
    sy=x.toLocal8Bit().data();
    konwerterONP(wy, sy);
0

to mi działa i problem zaczyna się gdy chce użyć

w=onp_licz(test,100);

ponieważ nie wiem jak przypisać do test=wynik

0

ok kolejny strzał :)

string retrieveString(char* buf, int l);

L to długość bufora a bufor to twój char*

0

Jeśli dam po prostu

string test[]={"2","2","+","="};
w=onp_licz(test,100);

to wszystko działa więc jest tylko problem z konwersją

0

... to spróbuj tego sposobu który napisałem....

0

Albo nie wiem jak to użyć albo nie działa

0

... pierwszy jest string czyli to do czego zapisujesz, pierwszy parametr funkcji to twój char* czyli po prosu wynik ale wynik jest w funkcji więc musisz go jakoś przekazac poza funkcję żeby go podać w innej a drugi parametr to długość twojego char* bo funkcja musi znać rozmiar

0
string test(wy, wielkosc);

czyli tak mam to użyć ? i w test będę miał już to prze-konwertowane dobrze myślę ?

0

... jeśli się nie mylę:

void test1(char &*wynik, char *se);
double licz (string retrivestring(wynik,sizeof(wynik)/sizeof(wynik[0]))); 
0

bo wynik jest w jednej funkcji a nie jest widoczny w drugiej...

0

Jak to dla mnie wygląda:
Pokazujesz hulajnogę i twierdzisz że ci to działa. Po czym pokazujesz nadwozie malucha i pytasz jak masz to dopasować.
Weź to wywal (oba kody) -napisz po ludzku o od razu analizując napis buduj stos ONP.
Oba ponieważ ten test "zaakceptuje" 1.2.3.4.5.6 jako jedną liczbę - jedno słowo bubel.

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