• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kopiowanie części stringa w inno miejsce.

Object Storage Arubacloud
0 głosów
1,023 wizyt
pytanie zadane 15 maja 2016 w C i C++ przez Sinnley Stary wyjadacz (12,810 p.)

Witam, potrzebuje podzielić string na części.

Stworzyłem sobie strukturke w postaci:

struct rownanie {

    string cale;  // cale rownanie pod postacia stringa
    string poczatek; // lewa strona rownania
    string koniec; // prawa strona rownania
    char znak; // +/-

};



Chcialbym zeby po operacjach na stringu "cale" o wartosci np: 27+14, w stringu poczatek znalazlo sie 27, w koncu 14, a w zanku +. Szukałem odpowiedniej funkcji ale nie znalazlem. Potrzebne mi cos w postaci:

"String.Kopiowanie(gdzie, od ktorej pozycji, ile znakow)"

lub cos podobnego. Jakiej funkcji/metody powinienem uzyc? Próbowałem już m.in string.copy(), ale on potrzebuje const * char, wiec nawet zamiana stringu za pomoca c_str() w lancuch w stylu C nic nie daje z powodu tego, ze nie mam tu stalej.

2 odpowiedzi

+1 głos
odpowiedź 15 maja 2016 przez criss Mędrzec (172,590 p.)
wybrane 15 maja 2016 przez Sinnley
 
Najlepsza

Z Javy sie dopiero przesiadłeś? :D W C++ "czasem" trzeba coś napisać samemu. Jeśli to wyrażenie jest zawsze w takiej postaci (liczba (+/-) liczba), to sprawa jest banalna. Na początek usuń sobie spacje ze stringa:

for(auto it = str.begin(); it != str.end(); )
{
     if(*it == ' ')
        str.erase(it);
     else it++;
}

Potem znajdź pozycje znaku operatora (+/-) - możesz wykorzystać funkcje isdigit - i wydziel odpowiedni fragment stringa za pomocą metody .substr.

PS: "27 + 14" to nie równanie. Równanie, jak nazwa wskazuje, musi mieć znak równości.

komentarz 15 maja 2016 przez Sinnley Stary wyjadacz (12,810 p.)
Hej, javy nie ruszalem. Funkcjr usuwajaca spacje juz wczesniej zrobilem. Wiem tez ze bez = to nie równanie, tutaj podalem to w ten sposób tylko dla przykładu. Stwierdziłem że nie ma sensu żeby robić własną funkcję jeśli może być taka gotowa. Tak czy siak dzieki za substr :)
komentarz 15 maja 2016 przez criss Mędrzec (172,590 p.)
Zaglądaj w dokumentacje na cppreference na przykład. Jeśli tam nie znajdziesz, tzn, że nie ma. (tzn. teraz juz nie szukaj, bo nie ma :D)
komentarz 15 maja 2016 przez Sinnley Stary wyjadacz (12,810 p.)
Mam też jeszcze jedno pytanie, tutaj: http://www.cplusplus.com/reference/string/string/substr/

Nie do konca czaję dwie rzeczy. Po pierwsze - czym jest ta zmienna "size_t" i po drugie czym jest parametr domyslny "npos"?
komentarz 15 maja 2016 przez criss Mędrzec (172,590 p.)
size_t to po prostu taki specjalny typedef którym określa się rozmiar. Możesz to traktować jak unsigned int.

Domyślny npos pewnie zapewnia, że jeśli nie podasz drugiego argumentu, to będzie szukał od pozycji podanej w 1. arg. aż do samego końca stringa. std::string::npos to stała o wartości największej przyjmowanej wartości typu size_t.
komentarz 15 maja 2016 przez Sinnley Stary wyjadacz (12,810 p.)
I wszystko jasne :)
0 głosów
odpowiedź 15 maja 2016 przez hubot Dyskutant (9,090 p.)
void copyEquation(rownanie src, rownanie dest)
{
dest.cale = src.cale;
dest.poczatek = src.poczatek;
dest.koniec = src.koniec;
dest.znak = src.znak;
}

Tak swoją drogą proponowałbym ci zrobić klasę Equation i tam w kontruktorze zrobić inicjalizację.

komentarz 15 maja 2016 przez Sinnley Stary wyjadacz (12,810 p.)
Pewnie bym tak zrobił gdyby nie fakt że w programowanie obiektowe dopiero wchodzę i nie wiem co to konstruktor. To co zrobiłeś to własna funkcja na podatek inna niz szukam, a ja pytalem o to czy istnieje jakaś biblioteczna :). Nie ma takiej ?

Podobne pytania

0 głosów
3 odpowiedzi 1,020 wizyt
pytanie zadane 15 lipca 2016 w C i C++ przez Ganjax666 Nowicjusz (190 p.)
0 głosów
2 odpowiedzi 141 wizyt
0 głosów
1 odpowiedź 468 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...