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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2013-04-08 10:06:28

  caro_cenzura - Użytkownik

caro_cenzura
Użytkownik
Zarejestrowany: 2012-08-29

[C++] Zadanie matura 2009

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ć:

Kod:

#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)


Daj człowiekowi rybę, nakarmisz go na jeden dzień. Naucz go łowić, a nakarmisz go na całe życie.

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)