Konwersja typów

Odpowiedz Nowy wątek
2015-01-10 10:51
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 ?

Pozostało 580 znaków

2015-01-10 10:54
0

a

test=wynik; 

nie działa?


Programuje i programuje ,przychodzi człowiek "o niższej inteligencji" i rok pracy zmarnowany
edytowany 1x, ostatnio: Niikelion, 2015-01-10 10:54

Pozostało 580 znaków

2015-01-10 10:56
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)]}'

edytowany 1x, ostatnio: donex93, 2015-01-10 11:01

Pozostało 580 znaków

2015-01-10 11:00
1
double licz(string test,int wielkosc);
lepiej byłoby z referencją (i pewnie const, ale bez większej ilości kodu tego nie stwierdzisz) - vpiotr 2015-01-10 11:03
Wiem i dlatego wolałem nic nie dodawać, tylko uciąć co zbędne ;p - satirev 2015-01-10 11:06

Pozostało 580 znaków

2015-01-10 11:03
0

no faktycznie....


Programuje i programuje ,przychodzi człowiek "o niższej inteligencji" i rok pracy zmarnowany

Pozostało 580 znaków

2015-01-10 11:04
0

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

edytowany 1x, ostatnio: donex93, 2015-01-10 11:05
Napisz czego oczekujesz, co Ci nie działa, a nie co przewidujesz. - vpiotr 2015-01-10 11:14

Pozostało 580 znaków

2015-01-10 11:07
0

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

Pozostało 580 znaków

2015-01-10 11:11
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);
edytowany 1x, ostatnio: donex93, 2015-01-10 11:12

Pozostało 580 znaków

2015-01-10 11:13
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

Pozostało 580 znaków

2015-01-10 11:17
0

ok kolejny strzał :)

string retrieveString(char* buf, int l);

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


Programuje i programuje ,przychodzi człowiek "o niższej inteligencji" i rok pracy zmarnowany
edytowany 1x, ostatnio: Niikelion, 2015-01-10 12:59
za nazwy typu "l" należy się od razu "1" (czy tam jedna chmurka - nie znam się na obecnych ocenach). - vpiotr 2015-01-10 12:54
gdzie masz błąd? int l-lenght - Niikelion 2015-01-10 12:59
taka czcionka jest na forum... - Niikelion 2015-01-10 12:59
@Niikelion: przeczytaj poniższy link i stosuj w każdym języku programowania (C, Python, SQL, Excel VBA etc): https://www.python.org/dev/peps/pep-0008/#names-to-avoid - vpiotr 2015-01-10 13:07
czepiasz się... ja i tak korzystam z pełnych nazw zmiennych a tu daje przykład... jak to autor zapisze to jego problem - Niikelion 2015-01-10 13:09
nie wiem z czego korzystasz, nie piszę Twojej biografii. Komentuję tylko powyższe. - vpiotr 2015-01-10 13:10

Pozostało 580 znaków

2015-01-10 11:18
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ą

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