BarHorab Temat założony przez niniejszego użytkownika |
Proste szyfrowanie za pomocą stringa » 2018-12-06 17:14:57 Uczę się trochę CPP ale jestem niecierpliwy i chciałbym napisać programik do prostego szyfrowania. Wprowadzamy lub wklejamy do stringa jakiś ciąg znaków getline (cin,text), czyli mamy tablicę z każdym pojedynczym znakiem w osobnej komórce. Następnie program zamienia wprowadzone znaki według przypisania np. a=g, b=t, c=m i daje na wyjściu cout zmieniony ciąg. Np. wpisujemy kotek, a otrzymujemy ftrwm. Przeglądałem metody klasy string i rzeczywiście są różne funkcje, ale nie znalazłem tego co potrzebne do zrealizowania mojego programu. Proszę o jakieś podpowiedzi. |
|
jankowalski25 |
» 2018-12-06 17:51:08 |
|
BarHorab Temat założony przez niniejszego użytkownika |
» 2018-12-06 18:29:56 Ale czy nie można by tego załatwić 2-3 liniami kodu, bo analizując "basic_string::replace" wydaje mie się to strasznie pokomplikowane. A chciałbym najprościej jak można: getline: alfabet "abcdef"; szyfr "a=w; b=m; c=z; d=i; e=f; f=p" replace alfabet>szyfr; cout<<szyfr; ==>>wmzifp |
|
pekfos |
» 2018-12-06 19:07:12 replace() nie ma sensu w takim zastosowaniu.
Utwórz tablicę char szyfr[256], wypełnioną tak by dla każdego i, szyfr[i] = i. Wprowadź do tej tablicy przekształcenia, jakie chcesz, np szyfr['a'] = 'w'. Dla znaku c, zaszyfrowany znak to szyfr[c]. Jeśli szyfr ma być odwracalny, wynikowa tablica musi być permutacją oryginalnej, wypełnionej kolejnymi liczbami. |
|
BarHorab Temat założony przez niniejszego użytkownika |
» 2018-12-07 10:40:41 Bardzo dziękuję za konkretną pomoc. Nie wiem czy tutaj mogę wklejać kod. Jestem niestety trochę niecierpliwy i nie chcę studiować tych wszystkich regulaminów tego forum, tak więc zaryzykuję :) Programik ładnie zamienia mi tekst, ale nie wiem jak uczynić żeby traktował również spacje. W stringu można zastosować getline (cin,text), ale czy jest sposób na char? No i jeszcze w stringu można by łatwo zrobić policzenie wpisanych znaków żeby ich ilość dać do licznika for. Ma być oczywiście cout<<szyfr[A]; z małą literą a - nie wiem czemu w poście jest to przekręcone. #include <iostream> #include <windows.h> #include <cstdlib> using namespace std; char szyfr[256]; char a; int main() { for(int i=1; i<=4; i++) { cin>>a; szyfr / = a; szyfr['a'] = 'r'; szyfr['b'] = 'f'; szyfr['c'] = 'i'; szyfr['d'] = 'e'; cout<<szyfr /; } return 0; } |
|
jankowalski25 |
» 2018-12-07 11:30:00 replace() nie ma sensu w takim zastosowaniu |
Może mieć, jeśli alfabet zawiera wielobajtowe znaki. Nic nie stoi na przeszkodzie, aby w std::string używać polskich znaków zapisanych chociażby w UTF-8. Ale rzeczywiście, przy zwykłym ASCII łatwiej to zrobić prostą tablicą bajtów. Nie wiem czy tutaj mogę wklejać kod. |
Możesz, ale wstawiaj go w [cpp]kod[/cpp]. jak uczynić żeby traktował również spacje |
szyfr[ ' ' ] = 'x'; Chodzi o wczytywanie danych? Jeśli tak, to std::cin.get() pobiera pojedynczy znak. Chyba że chcesz wczytać wiele znaków za jednym zamachem, wtedy użyj std::cin.read() . |
|
BarHorab Temat założony przez niniejszego użytkownika |
» 2018-12-07 13:29:42 szyfr[ ' ' ] = 'x'; - nie działa i ignoruje spacje, to znaczy zamienia znaki ale bez spacji. cin.read() chyba dotyczy stringów, a teraz używam char. |
|
jankowalski25 |
» 2018-12-07 15:01:12 Bo nie wczytujesz spacji. Przecież cin >> a; pomija białe znaki! Dlatego lepiej użyć std::cin.get() . |
|
« 1 » |