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

Stos i odwracanie zdań C++

Object Storage Arubacloud
0 głosów
1,354 wizyt
pytanie zadane 23 maja 2019 w C i C++ przez Kaper99 Użytkownik (660 p.)

Witam!
Dostałem plik tekstowy ze zdaniami, które są zapisane od końca tzn. 
Hello! kota ma Ala. lozku na siedzi Patrycja. pozdrawiam Serdecznie! Kacper
Muszę je odwrócić tak, aby było :

Hello!

 Ala ma kota.
Patrycja siedzi na lozku.

Serdecznie pozdrawiam!

W tym celu mam używać stosu. Więc wczytałem plik na stos i wtedy tekst odczytany ze stosu wyglada tak:

Kacper Serdecznie! pozdrawiam Patrycja. siedzi na lozku Ala. ma kota Hello! 

Więc, stwierdziłem, że wystarczy odwrócic stos, ale to nie pomogło. 

Jak się za to zabrać, jak to zrobić używając wyłącznie stosu (o ile sie da)?
Chyba trzeba znaleźć kropki i wykrzykniki w tekście i od tego miejsca odwrócić zdania, tylko jak? Może ktoś podpowiedzieć? 

Kod, który obecnie mam

https://pastecode.xyz/view/81a2a6a6

2 odpowiedzi

+1 głos
odpowiedź 24 maja 2019 przez Marcin Siniarski Gaduła (4,420 p.)
wybrane 24 maja 2019 przez Kaper99
 
Najlepsza
Wczytuj wszystkie słowa na stos aż do napotkania znaku nowej linii. Kiedy go napotkasz, opróżnij stos wypisując wszystko co się w nim znajdowało.
komentarz 24 maja 2019 przez Kaper99 Użytkownik (660 p.)
Wczytałem tak jak mówicie i zdjąłem ze stosu. Kolejność zdań jest ok, ale nie mogę pozbyć się znaku końca linii oraz nie wiem jak dodać ten znak na koniec zdania. Tzn tekst po zdjęciu ze stosu wygląda tak :
Hello!
Ala. ma kota
Patrycja. siedzi na lozku
Serdecznie! pozdrawiam
A powinien
Hello!
Ala ma kota.
Patrycja siedzi na lozku.
Serdecznie pozdrawiam!
komentarz 24 maja 2019 przez Marcin Siniarski Gaduła (4,420 p.)

Wczytuj znak po znaku. Napotkasz spacje - wrzuć wyraz na stos, napotkasz \n - opróżniasz stos.

Możesz także zrobić jakąś logikę interpunkcji. Napotkałeś kropkę - zapisz to gdzieś i po opróżnianiu dodaj ją. 

komentarz 24 maja 2019 przez Kaper99 Użytkownik (660 p.)
Tak zrobiłem tzn. zapisałem znak końcowy ( "." lub "!") i wypisuje go zaraz po wypisaniu stosu.
Tylko pytanie czy sprawdzający nauczyciel nie przyczepi się, że jest np dużo zbędnego kodu który mógłby być zastąpionym innym krótszym rozwiązaniem ? :D
komentarz 24 maja 2019 przez Marcin Siniarski Gaduła (4,420 p.)
Aaa, dopiero ogarnąłem, że newline nie pomoże.

Może tak, jeśli wykryjesz znak interpunkcyjny, zapisz go, usuń ten znak z obecnego wyrazu, dodaj go do stosu (lub nie), teraz opróżnij stos i dodaj zapisany znak.

Nie wiem czy da się prościej, ale to jest najprostsza rzecz jaką wymyśliłem.
komentarz 24 maja 2019 przez Kaper99 Użytkownik (660 p.)
Ale i tak dziękuję za naprowadzenie :) .
+1 głos
odpowiedź 24 maja 2019 przez Patrycjerz Mędrzec (192,320 p.)
Wystarczy kłaść kolejne słowa na stos, aż do napotkania wyrazu z doklejonym znakiem końca zdania (kropka, pytajnik, wykrzyknik). Następnie ściągasz słowa ze stosu, co spowoduje wypisanie ich w poprawnej kolejności. Dla kolejnych zdań analogicznie.
komentarz 24 maja 2019 przez Kaper99 Użytkownik (660 p.)
edycja 24 maja 2019 przez Kaper99

---------------EDIT : Problem rozwiązany, dziękuję za pomoc :) . -------------------

Zrobiłem tak jak mówisz i to działa, zdania są odwrócone natomiast nie wiem jak się pozbyć znaku końca zdania ( "." oraz "!") tzn. zdania wyglądają tak : 
Hello!
Ala. ma kota
Patrycja. siedzi na lozku
Serdecznie! pozdrawiam

Możliwe, że to jest spowodowane sposobem wczytywania, ale nie wiem jak inaczej można wczytać uwzględniając kilka znaków końca zdania. Załączam kod całęgo programu i ss wczytywania  https://paste.ofcode.org/Z7bjYqSeSKeLiRxwPUWapL

Próbowałem zastąpić kropkę znakiem spacji, ale nie wygląda to dobrze w konsoli (duża przestrzeń między wyrazami).

Podobne pytania

0 głosów
1 odpowiedź 435 wizyt
pytanie zadane 12 grudnia 2016 w C i C++ przez ijo Nowicjusz (220 p.)
0 głosów
1 odpowiedź 1,613 wizyt
pytanie zadane 10 lutego 2017 w C i C++ przez Krystek102 Bywalec (2,440 p.)
0 głosów
1 odpowiedź 896 wizyt
pytanie zadane 23 września 2021 w C i C++ przez Joshe Początkujący (280 p.)

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!

...