Liczba postów: 4
Liczba wątków: 2
Dołączył: 05.04.2015
16.12.2018, 14:22
(Ten post był ostatnio modyfikowany: 16.12.2018, 20:03 przez Szachista.
Powód edycji: Znacznik code
)
Zamiana całego zestawu znaków wg przyporządkowania
Chcę sklecić programik C++ żeby mi całościowo zamieniał wpisany tekst według przyporządkowanych np. par znaków. Mam taki kod, ale szaleje i daje złe wyniki. Proszę o podpowiedź.
Kod:
#include <iostream>
#include <windows.h>
#include <cstdlib>
using namespace std;
unsigned char znaki[256];
char a;
int main()
{
for(int i=1; i<=10000; i++)
{
cin.get( a );
znaki[static_cast<unsigned char>(a)] = a;
znaki[static_cast<unsigned char>('12')] ='ab';
znaki[static_cast<unsigned char>('34')]='cd';
cout<<znaki[static_cast<unsigned char>(a)];
}
return 0;
}
Liczba postów: 2465
Liczba wątków: 17
Dołączył: 12.11.2007
16.12.2018, 20:06
RE: Zamiana całego zestawu znaków wg przyporządkowania
Czy mógłbyś jaśniej określić, co chcesz osiągnąć? Chcesz zamienić dany znak na inny, a to odwzorowanie znajduje się w tablicy znaki? Pary znaków musiałbyś inaczej zamienić.
Liczba postów: 4
Liczba wątków: 2
Dołączył: 05.04.2015
18.12.2018, 09:57
RE: Zamiana całego zestawu znaków wg przyporządkowania
Rzeczywiście może nie wyraziłem się do końca jasno. Podporządkowuję (nie wiem czy to poprawny termin w tym wypadku) każdej parze znaków inną parę, np. 'ab'='rg';'cd'='zn';'ef'='tt';'gh'='pl' Wpisuję na przykład tekst "abcdefgh", a program zamienia mi ten tekst na "rgznttpl".
Liczba postów: 10462
Liczba wątków: 152
Dołączył: 04.04.2006
18.12.2018, 11:44
RE: Zamiana całego zestawu znaków wg przyporządkowania
Stwórz tablicę dwuwymiarową, i w instrukcji Switch/Case podmieniaj zestaw z pierwszej tablicy zestawem z drugiej. Najprostsze rozwiązanie, jakie mi przychodzi do głowy.
Pozdrawiam.
Ajgor
Liczba postów: 4
Liczba wątków: 2
Dołączył: 05.04.2015
19.12.2018, 13:31
RE: Zamiana całego zestawu znaków wg przyporządkowania
A czy byłbyś łaskaw zaszczycić mnie chociaż dwiema linijkami kodu?
Liczba postów: 2465
Liczba wątków: 17
Dołączył: 12.11.2007
19.12.2018, 16:45
RE: Zamiana całego zestawu znaków wg przyporządkowania
Kod:
string zamiana(const string &wejscie, const map<string, string> &odwzorowanie)
{
string wyjscie = wejscie;
for (map<string, string>::const_iterator it = odwzorowanie.begin(); it != odwzorowanie.end(); ++it)
{
long idx = 0;
while ((idx = wejscie.find(it->first, idx)) != string::npos)
{
wyjscie.replace(idx, it->first.size(), it->second);
idx += it->first.size();
}
}
return wyjscie;
}
A w funkcji głównej
Kod:
map<string, string> odwz;
odwz["ab"] = "rg";
odwz["cd"] = "zn";
odwz["ef"] = "tr";
odwz["gh"] = "pl";
cout << zamiana("abcdefgh", odwz) << endl;
Program zadziała jedynie wtedy, gdy podmieniane pary mają tę samą długość i nie nachodzą na siebie.