Witam, ostatnio rozpocząłem jeden ze swoich pierwszych projektów. Napisałem program który miał za zadanie przesunąć kod ASCII w pliku tekstowym o 1 tak aby np. napis "ALA" zamienił się w "BMB" (Czyli char'y z wartością ASCII +1).
Problem pojawił się w pętli która ma za zadanie zmienić wartość liter w stringu. Kiedy odpalam program wartość temp (czyli ilość znaków w linijce pliku .txt) daje złe wartości a zawartość zmienionego stringa w tablicy to losowe znaki. Plik tekstowy nie zmienia się tak jak powinien.
Byłbym wdzięczny gdyby ktoś wiedział gdzie zrobiłem błąd w pętli, nasiedziałem się nad tym dobre parę godzin. Z góry przepraszam jeżeli kod jest nieczytelny albo źle sformatowany, dopiero zaczynam
Pętla z błędem pojawia się po alokowaniu tablicy char l, wszystko przed tym działa tak jak powinno.
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <cstdlib>
#include <string>
#include <time.h>
using namespace std;
void optionC()
{
//Getting txt file
string name;
cout<<"Type name of the txt file: "<<name;
cin>>name;
name+=".txt";
fstream plik;
plik.open(name,ios::in);
if (!plik)
{
cerr << "Unable to open file datafile.txt";
exit(1);
}
//Counting file lines
string line;
int line_num=1;
while(getline(plik, line))
{
line_num++;
}
plik.close();
//Alocating string
string *lines;
lines = new string [line_num];
plik.open(name,ios::in);
int i=0;
while(getline(plik, line))
{
lines[i]=line;
i++;
}
plik.close();
//ascii
string bufor;
char *l;
l = new char [1000];
//BŁĄD
for(int a=1;a<line_num;a++)
{
int temp = lines[a-1].length();
cout<<"[TEMP: "<<temp<<"] ";
for(int b=0;b<=temp;b++)
{
bufor = lines[a-1];
l[b] = bufor[b];
//Changing ascii position
if (l[b]>125)
{
l[b]=l[b]-1;
}
else
{
l[b]=l[b]+1;
}
bufor[b]=l[b];
}
lines[a-1]=bufor;
cout<<lines[a-1]<<endl;
}
cout<<"works";
//saving
plik.open(name,ios::out);
int h=0;
while(i<line_num)
{
plik<<lines[h]<<endl;
h++;
}
plik.close();
delete [] l;
delete [] lines;
}
int main()
{
optionC();
return 0;
}