Kod Cezara wskazniki

0

Witam mam problem z kodem cezara, mam gotowy program ale muszę jeszcze dodać wskaźniki ale za bardzo nie wiem w których miejscach i jak się za to zabrać. Poniżej przedstawiam kod źródłowy programu :

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

ifstream odczyt("dane.txt");
ofstream zapis("wynik.txt");

void szyfrowanie(int k)
{
	string litera1, litera2;
	while (!odczyt.eof())
	{
		odczyt >> litera1;
		for (int i = 0; i < litera1.length(); i++)
		{
			if ((int)litera1[i] > 64 && (int)litera1[i] < 91)
			{
				if ((int)litera1[i] < 91 && (int)litera1[i] + k>90)
					litera2.push_back(litera1[i] - 26 + k);


				if ((int)litera1[i] < 91 && (int)litera1[i] + k < 91)
					litera2.push_back(litera1[i] + k);

				if ((int)litera1[i] > 96 && (int)litera1[i] + k > 122)
					litera2.push_back(litera1[i] - 26 + k);

				if ((int)litera1[i] > 96 && (int)litera1[i] + k < 123)
					litera2.push_back(litera1[i] + k);
			}

			if ((int)litera1[i] > 96 && (int)litera1[i] < 123)
			{
				if ((int)litera1[i] < 91 && (int)litera1[i] + k>90)
					litera2.push_back(litera1[i] - 26 + k);


				if ((int)litera1[i] < 91 && (int)litera1[i] + k < 91)
					litera2.push_back(litera1[i] + k);

				if ((int)litera1[i] > 96 && (int)litera1[i] + k > 122)
					litera2.push_back(litera1[i] - 26 + k);

				if ((int)litera1[i] > 96 && (int)litera1[i] + k < 123)
					litera2.push_back(litera1[i] + k);
			}
		}

		zapis << litera2 << endl;
		litera2.clear();
	}
		
}

void deszyfrowanie(int k)
{
	string litera1, litera2;
	while (!odczyt.eof())
	{
		odczyt >> litera1;
		for (int i = 0; i < litera1.length(); i++)
		{

			if ((int)litera1[i] > 96 && (int)litera1[i] < 123)
			{
				if ((int)litera1[i] > 64 && (int)litera1[i] - k < 65 && (int)litera1[i] < 95)
					litera2.push_back(litera1[i] + 26 - k);


				if ((int)litera1[i] > 64 && (int)litera1[i] - k > 64 && (int)litera1[i] < 95)
					litera2.push_back(litera1[i] - k);

				if ((int)litera1[i] > 96 && (int)litera1[i] - k < 97)
					litera2.push_back(litera1[i] + 26 - k);

				if ((int)litera1[i] > 96 && (int)litera1[i] - k > 96)
					litera2.push_back(litera1[i] - k);
			}


			if ((int)litera1[i] > 64 && (int)litera1[i] < 91)
			{
				if ((int)litera1[i] > 64 && (int)litera1[i] - k < 65 && (int)litera1[i] < 95)
					litera2.push_back(litera1[i] + 26 - k);


				if ((int)litera1[i] > 64 && (int)litera1[i] - k > 64 && (int)litera1[i] < 95)
					litera2.push_back(litera1[i] - k);

				if ((int)litera1[i] > 96 && (int)litera1[i] - k < 97)
					litera2.push_back(litera1[i] + 26 - k);

				if ((int)litera1[i] > 96 && (int)litera1[i] - k > 96)
					litera2.push_back(litera1[i] - k);
			}

		}

		zapis << litera2 << endl;
		litera2.clear();
	}
}

int main()
{
	int a;
	int klucz;
	cout << "Podaj klucz: ";
	cin >> klucz;

	if (klucz >= 0)
		for (; klucz > 25; )
			klucz = klucz - 26;

	else
		for (; klucz < 0;)
			klucz = klucz + 26;

	cout << "Jesli chcesz szyfrowac wcisnij 1, jesli chcesz deszyfrowac, wcisnij 2: ";

	do {
		cin >> a;
		if (a == 1)
		{
			szyfrowanie(klucz);
			system("pause");
			return 0;
		}
		if (a == 2)
		{
			deszyfrowanie(klucz);
			system("pause");
			return 0;
		}
		else
			cout << "Wprowadziles niepoprawna liczbe, sprobuj jeszcze raz: " << endl;
	} while (a != 1 || a != 2);

	system("pause");
} 
0

nie kod cezara a szyfr cezara a powiedz mi skad my mamy wiedziec co Ty masz zrobic?
to sobie dodaj wskaznik o taki w main

void *ptr 

i masz uniwersalny wskaznik!

0

Nie wiem, koleś po prostu powiedział, że ten program jest dobry ale mam użyć w nim wskaźników...

0
Szczafik napisał(a):

Nie wiem, koleś po prostu powiedział, że ten program jest dobry ...
Nie przejmuj się koleś brzydko pożartował. Poniżej jest dobry program, zauważ że robi to samo:

#include <ctype.h>
#include <stdio.h>

char code(char ch,int key) { return isalpha(ch)?(isupper(ch)?'A'+(ch-'A'+key)%26:'a'+(ch-'a'+key)%26):ch; }
  
char *encode(char *str,int key)
  {
   char *p;
   key%=26;
   if(key<0) key+=26;
   for(p=str;*p;++p) *p=code(*p,key);
   return str;
  }
  
char *decode(char *str,int key) { return encode(str,-key); }
  
int main()
  {
   int key;
   char bufor[1000];
   for(;;)
     {
      printf("podaj klucz i tekst: ");
      if(scanf("%d %999[^\n]s",&key,bufor)!=2) return 0;
      printf("input:  \"%s\"\n",bufor);
      printf("encode: \"%s\"\n",encode(bufor,key)); 
      printf("decode: \"%s\"\n",decode(bufor,key)); 
     }   
  }
0

wyskakuje :

Severity Code Description Project File Line
Error C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. ConsoleApplication8 d:\visual\consoleapplication8\consoleapplication8\source.cpp 24

0

Zobacz, a tu działa: http://ideone.com/Dm9Tqq

0

korzystam z visualstudio i nie działa

1

Nie, jedynie nie umiesz korzystać.
c671c16b98.png

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