PDA

Tam Sürümünü Görmek İçin : karakter düzeltme programı


choldax
16/03/2008, 21:05
char ch;
string st;
ifstream myfile("a.txt");
ofstream yourfile("b.txt");
for(int i=0; !myfile.eof(); i++)
{
myfile>>ch;
st[i] = ch;
cout<<ch;
}

for(int i=0; i<st.length(); i++)
{
if(st[i] == '-' && 'a'<=st[i-1]<='z')
{
st[i+1] = '\b';
}
}

cout<<st;

//yourfile<<st;

return 0;
}

program çalışırken patlıyor. hata nerede?
saygılar


acehreli
16/03/2008, 23:56
1) st bos oldugu icin st[i] diye bir karaktere erisemezsin. Zaten ikinci for'a hic girilmiyordur; cunku st.length() sifir...

2) Patlama nedeni bu degil ama satirda okunacak karakter kalmamis olsa bile !myfile.eof() dogru sonuc dOndUrur. Bunun sonucunda birinci for'a fazladan bir kere daha girersin; myfile>>ch, karakter kalmadigi icin ch'yi degistiremez; bu nedenle myfile'in sonuncu karakterini iki kere islersin.

Ali

hgedek
17/03/2008, 23:38
for da myfile değil ch ı kullan ki ch EOF değilse sürsün döngü.
st[i] demişsin.anlamı ne bunun.yani st bir pointer dır ve sen bunu oluşturmamışsın bile.

acehreli
18/03/2008, 01:10
st orada bir string (std::string yani). std::string'in karakter erisim isleci de vardir: st[0], bir string'in ilk karakterini verir. Ama bu ancak string bos olmadiginda yasaldir.

Ali