Witam! Muszę napisać program, który będzie sprawdzał czy podany wyraz jest palindromem (Dokładniej lista 200 wyrazów zapisanych w pliku tekstowym). Moim zdaniem niezbędnym do tego elementem jest odwrócenie części wyrazu i porównanie go z drugą połową. Jednak napisany przeze mnie kod nie działa zbyt dobrze. Zamiast odwrotności pojawiają się losowe znaki. Nie wiem o co chodzi i proszę o pomoc. PS. Jestem w tym zielony, C++ uczę się, gdyż C#, mojego dotychczasowego języka, nie można zdawać na maturze :/
Kod odpowiedzialny za odwracanie w przypadku wyrazu o parzystej liczbie znaków:
string b = wyraz.substr(dlugosc / 2, dlugosc);
string odwrotnosc = "";
for (int j = dlugosc; j > (dlugosc / 2); --j)
{
odwrotnosc += b[j - 1];
}
cout << odwrotnosc << endl; // test - wyswietla pustke (?)
Oraz nieparzystej:
string b = wyraz.substr(dlugosc - 1 / 2, dlugosc);
string odwrotnosc = "";
for (int j = dlugosc; j > (dlugosc - 1 / 2); --j)
{
odwrotnosc += b[j - 1];
}
cout << odwrotnosc << endl; // test - wyswietla losowe 2 znaki
Cały program:
#include <iostream>
#include <conio.h>
#include <string>
#include <fstream>
using namespace std;
int main()
{
fstream plik;
fstream wynik;
plik.open("hasla.txt", std::ios::in | std::ios::out);
wynik.open("wynik4b.txt", std::ios::out);
string wyraz;
for(int i = 0; i < 200; ++i)
{
plik >> wyraz;
int dlugosc = (int)wyraz.length();
if ((dlugosc % 2) == 0)
{
string b = wyraz.substr(dlugosc / 2, dlugosc);
string odwrotnosc = "";
for (int j = dlugosc; j > (dlugosc / 2); --j)
{
odwrotnosc += b[j - 1];
}
cout << odwrotnosc << endl; // test - wyswietla pustke (?)
if(wyraz.substr(0, dlugosc / 2) == odwrotnosc)
{
wynik << wyraz << endl;
}
}
else
{
string b = wyraz.substr(dlugosc - 1 / 2, dlugosc);
string odwrotnosc = "";
for (int j = dlugosc; j > (dlugosc - 1 / 2); --j)
{
odwrotnosc += b[j - 1];
}
cout << odwrotnosc << endl; // test - wyswietla losowe 2 znaki
if(wyraz.substr(0, (dlugosc - 1) / 2) == odwrotnosc)
{
wynik << wyraz << endl;
}
}
}
getch();
plik.close();
wynik.close();
return 0;
}