Porownywanie ciagu znakow, petla

Porownywanie ciagu znakow, petla
M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
0

Hej, od paru godzin mecze sie z tym blahym zadaniem. Nie moge poradzic sobie z wymysleniem uzycia petli w takiej sytuacji, ze mam podane dwa wyrazy np:

abbbbc oraz bbabbc i musze potwierdzic lub zaprzeczyc czy te slowa maja te same litery. Probowalem zrobic cos w stylu:

Kopiuj
 char *p, *d;
int i,b;
int main()
{
    p="abc";
    d="abc";
    
   
    
    for (i=0; i<=2; ++i)
    {
        if(p[i] == d[i])
        {
            b = 0;
            while(p[i] != d[b])
            {
                ++b;
                printf("tak");
            }
        }
    }
}

Ale wynikiem jest 3 krotne "tak". Nie wiem jak to ogarnac aby dzialalo w sposob nastepujacy (taki przynajmniej algorytm wydaje mi sie dobrym rozwiazaniem):

Wpisujemy abc/acb

Porownujemy:

Jesli p[0] == d[0] to sprawdzamy dla p[0] == d[0+1] i tak dalej az do przypadku kiedy bedzie to falsz i wtedy p[1] == d[0], p[1] == d[2] p[1] == d[2]
i tak w kolko az rozpatrzymy kazda mozliwa opcje.

Poratujcie, juz powoli trace wiare

//EDIT

Chodzi mi o zapetlenie tego typu warunkow:

Kopiuj
     
    if(p[0] == d[0])
    {
        if(p[1] == d[1])
        {
            if(p[2] == d[2])
            {
                printf("TAK");
            }
        }
        else if(p[0] == d[1])
        {
            if(p[1] == d[2])
            {
                if(p[2] == d[0])
                {
                    printf("TAK");
                }
            }
        }
    }
    else if(p[1] == d[0])
    {
        if(p[2] == d[1])
        {
            if(p[0] == d[2])
            {
                printf("TAK");
            }
        }
    }
bogdans
  • Rejestracja: dni
  • Ostatnio: dni
0

Ja bym posortował i porównywał pierwszy znak z pierwszym, drugi z drugim, itd.

M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
0

Co masz na mysli mowiac posortowal? Alfabetycznie i porownywac do momentu jakiejs roznicy? Myslalem jeszcze o zrobieniu czegos w stylu zliczania liter (np. 2a/1b/3c/4d i pozniej porowywania ich ilosci ale to sortowanie wydaje mi sie byc lepszym rozwiazaniem.

Sopelek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 467
2

Zliczanie liter będzie lepszym rozwiązaniem, bo możesz zrobić tablicę o wielkości równej liczbie możliwych znaków i wypełnić ją w czasie liniowym.

M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
0

Mozecie wskazac mi blad w tym kodzie? Dla abcdefgh wszystko dziala ale dla niektorych (np p,v) wynik szaleje i podaje jakies wartosci z kosmosu.

Kopiuj
 #include <stdio.h>





int main()
{
    
    char napis[1000], *result;
    int i;
    
    result = fgets (napis, 1000, stdin);
    
    
    // a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,r,s,t,u,v,w,x,y,z
    
    int tablica_w[9][25] = {
   //    a b c d e f g h i j k l m n o p r s t u v w x y z
        {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
        {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
        {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
        {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
        {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
        {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
        {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
        {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
        {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
        
    };
    i = 0;
    for (i = 0; napis[i] != ' '; i++)
    {
        if(napis[i] == 'a'){++tablica_w[0][0];}
        if(napis[i] == 'b'){ ++tablica_w[0][1]; }
        if(napis[i] == 'c'){ ++tablica_w[0][2]; }
        if(napis[i] == 'd'){ ++tablica_w[0][3]; }
        if(napis[i] == 'e'){ ++tablica_w[0][4]; }
        if(napis[i] == 'f'){ ++tablica_w[0][5]; }
        if(napis[i] == 'g'){ ++tablica_w[0][6]; }
        if(napis[i] == 'h'){ ++tablica_w[0][7]; }
        if(napis[i] == 'i'){ ++tablica_w[0][8]; }
        if(napis[i] == 'j'){ ++tablica_w[0][9]; }
        if(napis[i] == 'k'){ ++tablica_w[0][10]; }
        if(napis[i] == 'l'){ ++tablica_w[0][11]; }
        if(napis[i] == 'm'){ ++tablica_w[0][12]; }
        if(napis[i] == 'n'){ ++tablica_w[0][13]; }
        if(napis[i] == 'o'){ ++tablica_w[0][14]; }
        if(napis[i] == 'p'){ ++tablica_w[0][15]; }
        if(napis[i] == 'r'){ ++tablica_w[0][16]; }
        if(napis[i] == 's'){ ++tablica_w[0][17]; }
        if(napis[i] == 't'){ ++tablica_w[0][18]; }
        if(napis[i] == 'u'){ ++tablica_w[0][19]; }
        if(napis[i] == 'v'){ ++tablica_w[0][20]; }
        if(napis[i] == 'w'){ ++tablica_w[0][21]; }
        if(napis[i] == 'x'){ ++tablica_w[0][22]; }
        if(napis[i] == 'y'){ ++tablica_w[0][23]; }
        if(napis[i] == 'z'){ ++tablica_w[0][24]; }
        
        
        
    }

    
    printf("%d a\n", tablica_w[0][0]);
    printf("%d b\n", tablica_w[0][1]);
    printf("%d c\n", tablica_w[0][2]);
    printf("%d d\n", tablica_w[0][3]);
    printf("%d e\n", tablica_w[0][4]);
    printf("%d f\n", tablica_w[0][5]);
    printf("%d g\n", tablica_w[0][6]);
    printf("%d h\n", tablica_w[0][7]);
    printf("%d i\n", tablica_w[0][8]);
    printf("%d j\n", tablica_w[0][9]);
    printf("%d k\n", tablica_w[0][10]);
    printf("%d l\n", tablica_w[0][11]);
    printf("%d m\n", tablica_w[0][12]);
    printf("%d n\n", tablica_w[0][13]);
    printf("%d o\n", tablica_w[0][14]);
    printf("%d p\n", tablica_w[0][15]);
    printf("%d r\n", tablica_w[0][16]);
    printf("%d s\n", tablica_w[0][17]);
    printf("%d t\n", tablica_w[0][18]);
    printf("%d u\n", tablica_w[0][19]);
    printf("%d v\n", tablica_w[0][20]);
    printf("%d w\n", tablica_w[0][21]);
    printf("%d x\n", tablica_w[0][22]);
    printf("%d y\n", tablica_w[0][23]);
    printf("%d z\n", tablica_w[0][24]);
    
    
    

}
M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
0

mwl4 dzięki za ten kod, wszystko smiga i wiadomo, ze jest to lepiej napisane. Czy moglbys mi tylko podpowiedziec co jest nie tak w moim kodzie, ze tak mu odwala?

MO
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tam gdzie jest (centy)metro...
1

Ja bym zaczął od tego że już jest dostępny algorytm do wykonania tej czynności. Jeśli jednak "ja sam/kazali mi tak/..." to zalecam przeczytanie przynajmniej przykładów implementacji find / find_if / find_if_not.

http://en.cppreference.com/w/cpp/algorithm/find

M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
0

To jest napisane w C++, a nie C.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.