Merhaba arkadaşlar. Şifreleme ile ilgili bir ödevim var. c++'da yazmayı düşünüyorum. Yapılacak işlem basit ama pek kod bilgi olmadığı için elim kolum biraz bağlı.. Bir tablo olacak örneğin A=D, B=F şeklinde her karakterin değeri olacak. Programı açıp dosyayı seçeceğim ve program dosyadaki tüm karakterleri karşılıklarıyla çevirecek ve yeni bir şifrelenmiş dosya ortaya koyacak. Tabloyu ayrı olarak ben yazacağım siz sadece 5 karakterlik birşey bulsanız ya da kolay geliyorsa 2dk yazsanız yeterli benim için.. Şimdiden ÇOK TEŞEKKÜRLER :)
C++ İle Dosya İçeriğini Değiştirme Şifreleme?
Dosyanızda bulunan karakterlerin(ornegin A karakteri),karsılıgı yine bir alfanumerik karakter mi olacaktır(ornegin D) ? 5 karakterlik bir şey ile kastedilen nedir ? Sorunuzu biraz acarsanız daha iyi yardımcı olmaya calısırım.
Başarılar
evet aynen öyle olacak. A="benim seçeceğim bir harf"; şeklide olacak. 5 karakterden bahsettiğim de bu seçenekleri ben 255 karakterin hepsi için tek tek ayrı olarak gireceğim. Siz 5 karakter yaparsanız ben devamını getiririm.
Aslında çok zor değil gibi. Program dosyayı içine alacak. Ona vereceğim eşitliklere göre harfleri değiştirip yeni dosya yaratacak.
ilgilendiğin için teşekkürler :)
#include <iostream>
#include <fstream>
using namespace std;
main() {
ifstream dosya("oku.txt");
ofstream kayit("sifre.txt",ios::app);
char kar;
while(!dosya.eof()) {
dosya >> kar;
kar=toupper(kar);
if(kar=='A')
kar='B';
else if(kar=='B')
kar='C';
else if(kar=='C')
kar='D';
else if(kar=='D')
kar='F';
if(!dosya.eof())
kayit << kar;
}
return 0;
}
Bahsettiginiz durumu yukarıdaki if() kosulları ile isteginize gore gerceklestirebilirsiniz.
Başarılar
visual studio 2008'de çalıştırmayı denedim şu hatayı veriyor:
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
main kısmını int main() yapın.
Yukarıdaki yayımlamıs oldugum kod standart C++ dili ile yazılmıstır.Visual studio C++ veya borland C++ gibi dillerde bazı kutuphane dosyaları,standart C++'a gore farklı sekillerde tanımlanmıs olabiliyor veya bazı hatalara mahal verebiliyor.Yukarıdaki kod satırlarına #pragma onişlemcisini(preprocessor) ekleyerek programı derlemeyi deneyiniz.Eger derleyici(complier) hala programı derlemede sorun cıkarıyorsa,devC++ gibi bir editor uzerinde programı calıstırınız.
Başarılar
şimdi de sonsuz döngüye girdi.. ?
Program dogru bir sekilde calismaktadır.Ornegin oku adli metin dosyanıza abcd karakterlerini yazınız ve programı calıstırınız.Yeni olusacak sifre adlı metin dosyası icerisinde bcdf karakterleri yazmalıdır.
Karakter girilemiyor bunu visual c++a uygun olarak çevirebilir misiniz?
dev c++'da çalıştı. oku.txt'ye ABC yazdım. çevirdi fakat 4 kere.. yani BCDBCDBCDBCD şeklinde yazıyor. while döngüsünün koşuluyla ilgili olabilir mi?
Programın icerisinde karakter girisi yoktur.Soruda sadece dosya icerisinden veri okunması istendigi icin,karakter girisini kodlamadım,ancak istediginiz uzere kodun yeni halini yayımlıyorum.
#pragma
#include <iostream>
#include <fstream>
using namespace std;
main() {
ofstream dosya("oku.txt");
char dizi[30];
cout << "Kelimeleri giriniz:";
cin.getline(dizi,30);
dosya.write(dizi,strlen(dizi));
dosya.close();
ifstream dosya2("oku.txt");
ofstream kayit("sifre.txt");
char kar;
while(!dosya2.eof()) {
dosya2 >> kar;
kar=toupper(kar);
if(kar=='A')
kar='B';
else if(kar=='B')
kar='C';
else if(kar=='C')
kar='D';
else if(kar=='D')
kar='F';
if(!dosya2.eof())
kayit << kar;
}
dosya2.close();
kayit.close();
return 0;
}
Başarılar
Hayır,while() dongu kosulu dosya sonuna kadar ilgili metnin okunması icin kurgulanmıstır.Muhtemelen,siz bir kac defa programı calıstırdıgınız icin,her defasında dosyaya veri girisi gercekleştirmektedir.
ofstream kayit("sifre.txt",ios::app); satırındaki ios::app ifadesini kaldırınız,yani bu ifadeyi su sekilde yazınız -> ofstream kayit("sifre.txt");
Başarılar