[C++] Podział stringu na wyrazy parzyste i nieparzyste


(Kanaliaon) #1

Witam.

Napisałem program z Symfonii C++ Standard, wyd. 3 z 2008r, ćwiczenie XVIII/217, w skrócie: mamy w tablicy jakiś tekst i mamy napisać funkcję rozdzielającą poszczególne wyrazy do tablicy z nieparzystymi wyrazami i parzystymi, w obu przypadkach oddzielonymi spacją.

Jak zwykle będę wdzięczny za uwagi, spostrzeżenia, komentarze i wskazówki.

Ćwiczenie było po rozdziale o tablicach, więc nie piszcie o żadnych vectorach, klasach itp :wink:

#include

([alex]) #2

Wywal tą książkę natychmiast skoro nie możesz w niej znaleźć takich podstawowych funkcji jak strlen(),

oraz wciąż ci nie wyjaśniła ze do porównywania z konkretnym znakiem nie musisz znać kodu tego znaku:

if(zrodlo_==' ')_

1. Nie uwzględniłeś że na początku i końcu źródłowego wyrazu mogą być dodatkowe zbędne spacje;

2. Nie uwzględniłeś że pomiędzy dwoma wyrazami może być więcej niż jedna spacja.

Tu _3 strony_ dyskusji na ten temat.


(Lukaszxjakubowski) #3

Owszem, książka podaje te funkcje, ale w dalszych rozdziałach, a w tych ćwiczeniach zaraz po tablicach, nie chodzi o to, żeby używać gotowych funkcji, ale zrobić coś swojego. Nikt nigdy nie będzie dobrym programista, jeżeli będzie używał tylko gotowych rozwiązań. Z resztą temat nie wskazuje jednoznacznie na CIĄG ZNAKÓW, a taki nie zawsze jest stringiem, jeśli patrząc na string jako odrębną klasę.

A co do rozwiązania, porównujesz po kolej każdy znak, zapisując odczytane znaki do tej pory do tablicy z wyrazami nieparzystymi, jeśli napotkasz spację, albo ich kilka, tudzież białe znaki, to przechodzisz na drugą tablicę i do niej zapisujesz już następny wyraz. Jedno z wielu rozwiązań stworzone na poczekaniu :stuck_out_tongue:

Jeżeli nie poradzisz sobie, to jakimś kodem zarzucę.


(Kanaliaon) #4

Wyjaśniła, ale wychodzi na to samo.

Słusznie. Jeżeli na początku będą spacje, to program powinien je ignorować, a jeżeli pomiędzy wyrazami będzie więcej niż jedna spacja, to program powinien traktować je jako jedną, tzn czekać na znak inny niż ASCII 32, dobrze myślę?

A co, mój kod niedobry? Jak naprawię te 2 bugi, o których wspomniał [alex], to powinno być ok?


([alex]) #5

Nie zupełnie, jak piszesz if(zrodlo_==' ') to nie musisz pisać w komentarzu ze chodzi ci o spacje._

Doczytaj może do końca ten link co podałem. To zadanie zostało przeanalizowane chyba ze wszystkich stron. Nawet problem optymalności.