Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

Użytkownik


Witam,
Ćwiczę sobie C++, bo dawno nie kodowałem i trafiłem na problem, którego nie potrafię obejść.
Problem sprowadza się do znalezienia par słów, które nie spełniają warunków:
1. słowo drugie zawiera się w pierwszym
2. prefiks pierwszego słowa równa się sufiskowi słowa drugiego
3. sufiks słowa pierwszego równa się prefiksowi słowa drugiego
Dla ułatwienia dane to słowa złożone tylko z "1" i "0" oraz słowo pierwsze zawsze jest większe lub równe od słowa drugiego.
To co na razie udało mi się wypocić:
#include <iostream>
#include <string>
using namespace std;
bool zawiera(string a, string b);
bool prefiks(string a, string b);
bool sufiks(string a, string b);
int main()
{
string a,b;
int suma=0;
while(cin>>a>>b)
{
if(zawiera(a,b) && prefiks(a,b) && sufiks(a,b))suma++;
}
cout<<"\n"<<suma;
return 0;}
bool zawiera(string a, string b){
bool czy=false;
for(int i=0; i<a.size() ;i++)
{
int suma1=0;
for(int j=0; j<b.size() ;j++)
{
if(a[i+j] != b[j])break;
suma1++;
}
if(suma1==b.size()){czy=true; break;}
}
if(czy) return false;
return true;}
bool prefiks(string a, string b){
string a1="",b1="";
int dlugosc=0;
for(int i=0; i<b.size() ;i++)
{
a1+=a[i];
b1=b[b.size()-1-i]+b1;
if(b1!=a1)break;
dlugosc++;
}
if(dlugosc>0) return false;
return true;}
bool sufiks(string a, string b){
string a1="",b1="";
int dlugosc=0;
for(int i=0; i<b.size() ;i++)
{
a1=a[a.size()-1-i] + a1;
b1+=b[i];
if(b1!=a1)break;
dlugosc++;
}
if(dlugosc>0) return false;
return true;}Proszę o jakąś wskazówkę, bo nie mogę znaleźć żadnego błędu logicznego, ani programowego.
Oryginalna treść - zadanie 5, podpunkt c
Dane - plik dane.txt
Ostatnio edytowany przez caro_cenzura (2013-04-08 22:14:42)
Offline