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/.
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