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

Program "rozkodywujący"

Object Storage Arubacloud
0 głosów
211 wizyt
pytanie zadane 10 marca 2016 w C i C++ przez Mleczko Początkujący (260 p.)
Witam,
chciałbym stworzyć program, który po wpisaniu pewnego ciągu znaków np.:STI1 przeczytał go jako tuja (jeżeli ktoś nie wie o co chodzi: szyfr polega na tym, że zamiast pisać normalnie, to tak jakby cofamy się o jeden znak do tyłu, czyli B to A, C to B, a A to 1.

Niedawno wróciłem do uczenia się C++ po dłuższej przerwie, i niby mam już wstępną koncepcję ale nie wiem jak ją wykonać tzn. Program powinien mieć w sobie alfabet, oraz jedną zmienną dla ciągu wyrazów, który chcemy rozkodować. Podając ten ciąg wyrazów program powinien odwoływać się do alfabetu i jeżeli podam mu:
BCD to on znajdzie w alfabecie B i przesunie się o jedno miejsce do przodu, czyli na pozycji B pojawi się C, na C D, a na D E.

Chciałbym, żeby ktoś mi wytłumaczył jak to zrobić... próbowałem robić coś z tablicami etc. ale nic nie wychodziło po mojej myśli.

2 odpowiedzi

–1 głos
odpowiedź 10 marca 2016 przez Porcupine Nałogowiec (31,560 p.)
Raczej tablica jest zbędna, no chyba, że chcesz gdzieś zapamiętać tą zakodowaną wiadomość, a nie, że tylko wypisać ją na ekran. Ogólnie, wydaje mi się, że wystarczy zrobić coś takiego:

1) Deklarujesz zmienna typu string np. string msg;  i wczytujesz ją.
2) Przechodzisz w pętli po każdym znaku tego stringu ( for (int i = 0; i < msg.size(); i++)
3) Dla każdego znaku wypisujesz: (char)(msg[i] - 1);

Pozdrawiam,
2
komentarz 11 marca 2016 przez niezalogowany
Z tego co widzę, to autor pytania nie akceptuje krytyki, która jest słuszna, bo podane to rozwiązanie jest poprawne, wymaga jedynie dodania sprawdzenia czy nie wychodzi się poza zakres char'a, czyli [0,255]

Btw @Porcupine w 3) cast na char jest niepotrzebny, prędzej by się przydał msg[i] na int.
–1 głos
odpowiedź 11 marca 2016 przez MILLERTdev Użytkownik (900 p.)
Nie potrzeba żadnej tablicy. Wystarczy, że utworzysz sobie pętlę (najlepiej for) wykonującego się od wartości 0 do końca twojego napisu (funkcja size() lub length() według preferencji) i inkrementujesz zmienną w niej, co pozwoli na wybieranie poszczególnych znaków napisu. Co dalej musisz zrobić? Odwołać się do każdego kolejnego znaku w napisie i zapisać w nim znak o jeden mniejszy w kodzie ASCII. Jak to zrobić? Przyjmuję, że s to twój napis, a i zmienna w pętli. s[i] = char(s[i] - 1). Nie jestem pewien, czy do końca rozumiem o co ci chodzi z tą jedynką. Bo jeśli chodzi o przypadek, gdy literka jest a, to chcesz ją zamienić na 1, to najłatwiej to zrobić dodając do pętli warunek jeżeli znak jest a, to zamień go na 1 ( if(s[i]=='a') s[i]='1'; ), a w przeciwnym wypadku to, co wcześniej podawałem ( else s[i]==char(s[i]-1); ). Jeśli masz, co innego na myśli, a ja nie zrozumiałem, to daj znać, chętnie pomogę.
komentarz 11 marca 2016 przez Mleczko Początkujący (260 p.)
Dzięki za rozbudowaną odpowiedź, jednak tak jak powiedziałem, wróciłem do nauki programowania bardzo nie dawno. Kiedy jeszcze się uczyłem to daleko nie zaszedłem, rzuciłem to kiedy coraz mniej rozumiałem z poradników, więc z twojej odpowiedzi też dużo nie rozumiem.

Tzn. Ogarniam o co w tym chodzi, tylko nie wiem jak to napisać w kodzie :C.
komentarz 11 marca 2016 przez MILLERTdev Użytkownik (900 p.)
Hmmmm. Jeśli chcesz to bardzo chętnie napiszę ci funkcję  Bedziesz mógł wtedy pytac mnie o poszczególne elementy
komentarz 13 marca 2016 przez Mleczko Początkujący (260 p.)
Jakbyś miał czas, żeby napisać z wytłumaczeniem byłbym bardzo wdzięczny :).
Jeszcze takie dodatkowe pytanie, czy według Ciebie Symfonia C++ jest dobrą książką do nauki od postaw ?
komentarz 13 marca 2016 przez MILLERTdev Użytkownik (900 p.)
Zdecydowanie nie. Nie wiem dlaczego jest tak mocno polecana. Sam bardzo byłem nią zajarany, ale się rozczarowałem. Sama semamtyka języka nie jest trudna i przy okazji jest bardzo łatwo dostepna w internecie. Wiesz, czego potrzebujesz - szukasz i na pewno bedzie przystępnie wytłumaczone; zwlaszcza jeśli znasz angielski. Moim zdaniem dużo ważniejsze jest rozwiazywanie różnych problemów, myślenie logiczne i programistyczne. Serdecznie mogę polecic stronę SPOJ. Na poczatku niektóre zadania będą sprawiać problemy, ale z czasem część zagadnień bedzie wręcz intuicyjna. Więc polecam rozwiązywanie właśnie takich przykladzików, a w razie napotkania problemu szukanie funkcji, struktur itp. najlepszych do rozwiazania problemu.
komentarz 13 marca 2016 przez MILLERTdev Użytkownik (900 p.)
edycja 14 marca 2016 przez MILLERTdev
Napisałem w priv

Podobne pytania

0 głosów
1 odpowiedź 749 wizyt
pytanie zadane 24 marca 2019 w C i C++ przez inc0gnito Początkujący (260 p.)
+1 głos
0 odpowiedzi 3,415 wizyt
pytanie zadane 23 listopada 2019 w Python przez Nieprofesjonalny Użytkownik (890 p.)
–1 głos
2 odpowiedzi 256 wizyt
pytanie zadane 29 lipca 2019 w HTML i CSS przez fff Gaduła (3,950 p.)

92,579 zapytań

141,432 odpowiedzi

319,663 komentarzy

61,964 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!

...