[ anateus @ 22.12.2009. 13:21 ] @
napraviti funkciju koja pronalazi koliko se puta u stringu javlja neki dvocifreni broj (bez koristenja funkcija iz string.h)
hvala :)
[ Mihajlo Cvetanović @ 22.12.2009. 13:44 ] @
Da li je taj dvocifrani broj dat, ili se gleda broj pojavljivanja svih dvocifrenih brojeva?

Recimo da je ovo drugo, ovo bi bio algoritam:

Imaš jednu promenljivu koja kaže koliko si dvocifrenih brojeva izbrojao.
Imaš još jednu promenljivu koja kaže koliko si do sada cifara izbrojao u trenutnoj grupi cifara.
U petlji ispituješ znakove u stringu počevši od početka.
- Ako je trenutni znak cifra onda povećaj <brojač cifara> za jedan.
- Ako trenutni znak nije cifra (ili je kraj stringa) onda vidi da li je <brojač cifara> == 2, pa ako jeste uvećaj <brojač dvocifrenih brojeva>. U svakom slučaju postavi <brojač cifara> na nulu.
[ anateus @ 22.12.2009. 14:15 ] @
dat je neki dvocifreni br
[ Mihajlo Cvetanović @ 22.12.2009. 14:31 ] @
U tom slučaju algoritam je isti, samo sa sledećim dodatkom: u trenutku kad povećaš <brojač cifara> za jedan treba da ažuriraš i jedan broj koji služi za čitanje stringa.

brojac_cifara++;
procitani_broj = 10*procitani_broj + (dati_string[trenutni_indeks] - '0');

Kada ispituješ da li je <brojač cifara> jednak 2 treba istovremeno da ispituješ i da li je <pročitani broj> jednak <datom broju>. Kada resetuješ <brojač cifara> na nulu treba takođe da resetuješ i <pročitani broj>.

Postoji jedna nedoumica: da li dati broj sme da bude substring nekog većeg broja u datom stringu? Ako je dati broj 42 a dati string 'ab1425cd' da se ovaj 42 računa kao pojavljivanje dvocifrenog broja 42?

[ anateus @ 22.12.2009. 16:45 ] @
mislim da nije, jer u tom slucaju to vise nije dvocifreni broj
[ drki89 @ 30.01.2010. 21:41 ] @
Ako sam dobro shvatio problem ovo bi trebalo da bude resenje:

Code:

#include <stdio.h>
#include <stdlib.h>

int brojPonavljanja(char* str, char* br) {
    int brPon = 0;
    char *p;
    for(p=str;*p!='\0';) {
        if(*p==br[0]) {
            p++;
            if(*p==br[1]) brPon++;
        }
        else p++;
    }
    return brPon;
}

void main() {
    char* str;
    int duz;
    printf("Duzina niza:");
    scanf("%d",&duz);
    str = (char*)malloc(duz*sizeof(char));
    getchar();
    printf("Niz: ");
    gets(str);
    char br[2];
    br[0]=br[1]=0;
    printf("Broj koji se trazi:");
    scanf("%c%c",&br[0],&br[1]);
    printf("Broj ponavljanja: %d ",brojPonavljanja(str,br));
    free(str);
    system("pause");
}