Przygotowywuję się do matury z informatyki (nowa formuła, tylko poziom rozszerzony) i w ciągu ostatniego miesiąca kodowałem wszystkie zadania z poprzednich lat. Kiedy natknąłem się na zadanie z angramami. Robiłem najpierw surowy kod do sprawdzania czy wyrazy są anagramami, następnie próbowałem by sprawdzały czy wyrazy w pliku są anagramami i tutaj program świruje ponieważ przy pierwszych wyrazach nie-anagramach zatrzymuje się. Zamieszczam kod.
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
bool anagram (string wyraz,string tekst)
{
if (wyraz.size()!=tekst.size())
return false;
else
{
for (int i=0;i<wyraz.size()-1;i++)
{
for (int j=0;j<tekst.size()-1;j++)
{
if(wyraz[j]>wyraz[j+1])
swap (wyraz[j],wyraz[j+1]);
if(tekst[j]>tekst[j+1])
swap (tekst[j],tekst[j+1]);
}
}
}
return wyraz==tekst;
}
bool wczytaj(string nplik)
{
ifstream plik;
plik.open(nplik.c_str() );
if( !plik.good() )
return false;
while (true)
{
string wyraz;
string tekst;
plik>>wyraz>>tekst;
if (plik.good() )
cout<<anagram(wyraz,tekst)<<endl;
else
break;
}
return true;
plik.close();
}
int main()
{
if (!wczytaj("D:/anagram.txt"))
cout<<"nie udalo sie"<<endl;
return 0;
}
Jestem załamany ponieważ tylko tego nie rozumiem do matury.
C++ uczyłem się samodzielnie z książek, kursów na YT i innych stronach. Szkoła uczyła tylko Pascala który wydawał mi się bardziej skomplikowany niż C++