Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Proste szyfrowanie za pomocą stringa

Ostatnio zmodyfikowano 2018-12-07 15:01
Autor Wiadomość
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.
P-173124
jankowalski25
» 2018-12-06 17:51:08
P-173125
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
P-173126
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.
P-173130
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;
}
P-173151
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';


czy jest sposób na char?
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()
.
P-173152
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.
P-173155
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()
.
P-173158
« 1 »
  Strona 1 z 1