Program szyfrujący

0

Witam mam do napisania program który pobiera jakiś tekst i ma go zaszyfrować. Czyli że mam np literkę A to ma zamienić o 3 do przodu czyli D. No i moim pytaniem jest jak wczytać ten napis czy do tablicy char czy string?? oraz jak pobierać znaki pojedyńczo i je zamieniać na inne.

Z góry dziękuje

0

To co masz do zaimplementowania, to prosty jak cep "Szyfr Cezara". Pod takim hasłem szukaj w google, jestem pewien, że znajdziesz nawet gotowce. Szkoda, że nie pokazałeś nawet kawałka kodu, bo to znaczy, że masz nas za ludzi, którzy odwalą za Ciebie trochę pracy.

0

String czy tablica char'ów, obojętnie jeżeli chcesz tylko szyfrować. String do innych operacji będzie wygodniejszy. W celu zaszyfrowania całego string'a (ew. char[]) przechodzisz w pętli każdy znak i dodajesz do niego 3, tak aby z kodu ASCII wyszedł 3. następny znak. Mniej więcej tak:

string napis = "blablabladupadupa";
for (int i = 0; i < string.length(); i++)
{
   napis[i] = (char)(napis[i] + 3);
}
0

Dzięki wielkie. I nie chciałem abyście odwalili za mnie robotę tylko o nazwę funkcji lub coś w tym stylu. Ale dzięki wielkie.

0

Kurde napotkałem kolejny problem :/ Jak mogę zrobić aby po spółgłoskach dopisywało "o"?

0

Musisz wyznaczyć zbiór (tablicę) wszystkich spółgłosek i jeżeli aktualny znak równa się któremuś elementowi z tablicy (znaczy jest spółgłoską) wstawiasz za nim o metodą insert() z obiektu twojego string'a do zaszyfrowania. Więcej o tej metodzie tutaj: http://www.cplusplus.com/reference/string/string/insert/

0
bool spolgkoska(char n){
    return n == 'b' || n == 'B' || n == 'c'|| n =='C' ||  n == 'd' || n =='D' ;
}

Możesz to sprawdzać za pomocą np. takiej funkcji (W C musisz dodać bibliotekę bolean) Dodając oczywiście do tej funkcji pozostałe spółgłoski ( E F G H K L Ł M N P R S T W X Z Ż Ź)

char tab[10] = {"pokemony"};
if( spolgloska(tab[4]) == true )
    printf("spolgloska");
0

Chyba się nie zrozumieliśmy :D Chodzi mi o to że jak mam np tekst: "aca" to wynik ma być: "dfod" czyli dodać literę "o" po spółgłosce. A jak mam string zamieniony na int to jak to zrobić.

 #include <iostream>
#include <conio.h>
#include <string>

int main(){
	std::string napis="abccabac";
	std::cout << napis << std::endl;
	int asc[9999];
	int x = napis.length();
	// zamiana str na int
	for(int i=0;i<x;i++)
	{
		asc[i] = static_cast<int>(napis[i]);
	}
	//szyfrowanie

	for(int i=0;i<x;i++)
	{
		if(napis[i]=='a' || napis[i]=='e' || napis[i]=='i' || napis[i]=='y' || napis[i]=='o' || napis[i]=='u')	asc[i]+=3;
		else asc[i]+=3;

	for(int i=0;i<x;i++)
	{
		std::cout << asc[i] << ' ';
	}
	_getch();
}
0
aca" to wynik ma być: "dfod"

a wynik nie powinien być "acod", bo teraz zgłupiałem..

0

Jak ty chcesz zamienić string na int?? Co najwyżej char, jeden znak z tego string'a albo string na int[].

Ale żyś to brzydko zrobił z tą tablicą... Po co zamieniasz string na tablicę int'ów? Możesz zrobić tak jak kilka postów wyżej napisałem bez tego zbędnego zamieniania i tablicowania.

if(napis[i]=='a' || napis[i]=='e' || napis[i]=='i' || napis[i]=='y' || napis[i]=='o' || napis[i]=='u')        
    asc[i]+=3; // wtf?
else 
    asc[i]+=3; // wtf?
0

Nie nie właśnie samogłoski jak i spółgłoski przesunięcie o 3 i do tego jeszcze po spółgłoskach ma być dopisane "o", a to że pojedyńcze snaki ze stringa to wiem.

xeo545x39 no właśnie nie wiem co dać po else czyli jak będą spółgłoski.

0
#include <string>
#include <iostream>
using namespace std;

bool spolgkoska(char n){
    return ( n == 'b' || n == 'B' || n =='D'|| n =='d' ) ;
}
int main(int argc, char* argv[])
{
    string oldString,newString;
    cin >> oldString;
    for (int i =0;i<oldString.length();i++){
        newString += (int)(oldString[i]+3);
        if( spolgkoska(oldString[i]) == true)
            newString += "o" ;
    }
    cout << newString ;
    return 0;
}

Całe zadanie w 18 linijkach.

0

Nie rozumiem cię kolego, napisz jeszcze raz po ludzku.

0
#include <string>
#include <iostream>
using namespace std;
bool spolgkoska(char n){
    return ( n == 'b' || n == 'B' || n =='D'|| n =='d' ) ;
}
int main(int argc, char* argv[]){
    string oldString,newString;
    cin >> oldString;
    for (int i =0;i<oldString.length();i++){
        newString += (int)(oldString[i]+3);
        if( spolgkoska(oldString[i]) == true)
            newString += "o" ;
    }
    cout << newString ;
    return 0;
}

Tylko oczywiście musisz dopisać resztę spółgłosek. Szczerze mówiąc nie potrzeba tego nowego stringa, można od razy wypisaywać

for (int i =0;i<oldString.length();i++){
        cout <<(char)(oldString[i]+3);
        if( spolgkoska(oldString[i]) == true)
            cout << "o" ;
    }

żeby przyoszczędzić kilka bajtów.

0

Koernik czemu ten program szyfruje tylko do spacji??

0

Bo nie wczytujesz stringa getline()

getline(cin,oldString);
0
#include <iostream>

using namespace std;

int main()
{
    string str = "ala ma kota";
    for (int i = 0; i < str.length(); i++)
    {
        if (str[i] == ' ') // jeżeli spacja to dalej..
            continue;
        str[i] += 3;
        if (str[i] != 'a' && str[i] != 'e' && str[i] != 'o' && str[i] != 'u' && str[i] != 'y' && str[i] != 'i')
        {
            str.insert(i + 1, "o"); // wciskam 'o' za spółgłoskę
            i += 2; // przeskakuję za dodane 'o'
        }
    }
    cout << str;
    return 0;
}
0

Czy ktoś może mi powiedzieć czemu ten program mnie wywala jak po podaniu 'z' lub 'r' próbuje wpisać tekst do zaszyfrowania lub odszyfrowania to wpisuje jeden znak i program się wyłącza?
Oto kod programu:

#include <iostream>
#include <string>
#include <conio.h>

bool samogloska(char n)
{
	return (n == 'a' || n == 'e' || n == 'i' || n == 'y' || n == 'o' || n == 'u');
}

std::string szyfrowanie(std::string napis)
{
	std::string tekst;
	for(unsigned int i=0;i<napis.length();i++)
	{
		tekst += (int)(napis[i]+3);
		if(!samogloska(napis[i]))
			tekst += 'o';
	}
	return tekst;
}

std::string deszyfrowanie(std::string napis)
{
	std::string tekst;
	for(unsigned int i=0;i<napis.length();i++)
	{
		if(napis[i]!='o') tekst += (int)(napis[i]-3);
	}
	return tekst;
}

void main()
{
	char znak;
	std::string str;
	std::cin >> znak;
	std::getline(std::cin,str);
	switch(znak)
	{
		case 'z':
			std::cout << szyfrowanie(str);
			break;
		case 'r':
			std::cout << deszyfrowanie(str);
			break;
	}
	_getch();
}
0

Daj cin.ignore(); przed std::getline(...);.

1 użytkowników online, w tym zalogowanych: 0, gości: 1