Usunięcie końcowego fragmentu tekstu do pierwszego znaku "/"

2018-11-25 19:10
Finderr
0

Potrzebuje uciąć od końca tekstu fragment do pojawienia się znaku: '/'
Jednak zbytnio się zapętliłem. Czy ktoś da rade rozwiązać? :)

#include <iostream>

using namespace std;

int main()
{
    string adress = "/qwe/asd/zxc.txt";
    /*
    size_t pozycja;
    pozycja = adress.find("/");
    cout << pozycja << endl << endl;
    */

    int dlugosc;
    dlugosc = adress.length();
    for (dlugosc-1; dlugosc >= 0 ; dlugosc--)
    {
        while (adress[dlugosc]!='/')
        {
            cout << adress[dlugosc];                      //sprawdzenie//
        }
    }
    return 0;
}
edytowany 2x, ostatnio: furious programming, 2018-11-25 21:50
Wstawiaj kod w znaczniki kolorujące składnię – ```cpp przed kodem, a po kodzie samo ``` - furious programming 2018-11-25 21:50

Pozostało 580 znaków

2018-11-25 19:18
kq
0

Użyj reverse iteratorów.

    auto found = std::prev(std::find(adress.rbegin(), adress.rend(), '/').base());
    adress.erase(found, adress.end());

https://wandbox.org/permlink/A6VQtYC7t5ZWkvfr


edytowany 1x, ostatnio: kq, 2018-11-25 19:20

Pozostało 580 znaków

2018-11-25 19:28
Finderr
0

Dzięki, prawie wszystko ok, ale: nie mam c++11.
Znalazłem fraze którą musze wstawić: -std=c++11 tylko nie wiem w którym miejscu

Pozostało 580 znaków

2018-11-25 20:25
0
Finderr napisał(a):
        while (adress[dlugosc]!='/')
        {
            cout << adress[dlugosc];                      //sprawdzenie//
        }

i jak niby z tej pętli się wychodzi?

edytowany 2x, ostatnio: furious programming, 2018-11-25 21:50

Pozostało 580 znaków

2018-11-25 21:45
Finderr
0

Faktycznie, bez sensu zmienilem na cos takiego co wydaje sie byc ok, ale wylicza mi chyba wszystkie znaki z ASCII zamiast mojego napisu

#include <iostream>

using namespace std;

int main()
{
int dlugosc;
    dlugosc = adress.length();

    while (adress[dlugosc]!='/')
        {
            cout << adress[dlugosc];
            adress[dlugosc]--;
        }

    return 0;
}
edytowany 1x, ostatnio: furious programming, 2018-11-25 21:50

Pozostało 580 znaków

2018-11-25 22:06
0

To teraz pomyśl co zmniejszasz w instrukcji

 adress[dlugosc]--;

Pozostało 580 znaków

2018-11-25 22:16
kq
0

Samo adress[dlugosc] nie ma sensu, bo indeksy elementów to [0..dlugosc)

PS: to nie UB.


Pozostało 580 znaków

2018-11-25 22:46
Finderr
0
Miang napisał(a):

To teraz pomyśl co zmniejszasz w instrukcji

 adress[dlugosc]--;

No i pomyslałem i wymyslilem jakie głupoty wypisuje xd Teraz działa.

#include <iostream>

using namespace std;

int main()
{
    int dlugosc;
    dlugosc = adress.length();

    while (adress[dlugosc]!='/')
        {
            cout << adress[dlugosc];
            dlugosc--;
        }

    return 0;
}
edytowany 1x, ostatnio: furious programming, 2018-11-25 22:47
Wstawiaj kod w znaczniki kolorujące składnię. - furious programming 2018-11-25 22:47

Pozostało 580 znaków

2018-11-25 22:51
Finderr
0

Zapomanialem dokleic: string adress

edytowany 1x, ostatnio: furious programming, 2018-11-25 23:23

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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