Transatlantyk pisze:no dobrze, na podstawie Twojego kodu napisałam własny, powinien działać
Kod piszemy w ten sposób, że po napisaniu - testujemy.
oznacza, że kolejne wyszukiwanie rozpoczyna się od poprzedniego znalezionego dwuznaku?
Prawie. Rozpoczyna się od
czyli znaku dalej (no bo inaczej by się stworzyła nieskończona pętla, jakby tego +1 nie było)
No to tak, do paru rzeczy można by się przyczepić.
Nie musisz tego
n
pisać, można po prostu dać
i kompilator sam ustali rozmiar tablicy (bo po co to zliczać ręcznie?)
A jeszcze lepiej by to było dać w wektor, czyli
Kod: Zaznacz cały
vector<string> board{ "ch","ck","cs","cz","dz","gh","gl","gn","ly","ng","ny","ph","qu","rz","sc","sh","sz","th","xh","zh","zs" };
A potem zamiast
piszesz
Chodzi o to, że tak jest wygodniej - oraz bezpieczniej (bo co, jeśli byś tych dwuznaków miała tysiąc? Też byś je liczyła?)
Potem, napisałaś
Kod: Zaznacz cały
do {
getline(plik, data);
....
while (!plik.eof());
To jest ok. Ale równie dobrze można napisać
Ponieważ
getline
po dojściu do końcu pliku również zwróci
eofbit
, a to jest równoważne
false
dla
while
'a. Po prostu - parę linijek kodu mniej oraz większa czytelność.
No i dobra, zobaczmy co tu się dzieje dalej.
Na początku bierzesz wiersz z pliku, wrzucasz go do
data
, ok.
Potem dodajesz liczbę znaków tego wiersza do
suma
, ok.
ds
- nie mam pojęcia od czego to jest skrót. Tak samo
x
- zmień te nazwy na coś mówiące.
Analogicznie
słówko board oznacza po angielsku tablicę, ale taką szkolną, po której pisze się kredą. Tablica w znaczeniu jak w programowaniu to jest
array
Wracając do programu, ustalasz sobie
ds
jako
i-ty
dwuznak, ok.
Natomiast cały ten kolejny do...while nie jest dobrze zrobiony. Jeśli we wczytanym wierszu by nie było szukanego dwuznaku, to otrzymasz nieskończoną pętlę. Spójrz jeszcze raz, jak to u mnie jest zrobione.