Anunţ

Caută printre mesajele de pe forum înainte de a scrie unul nou!
Formulează corect întrebarea sau problema pe care o ai.
Respectă regulile forumului și Codul de Conduită!

#1 02 Jan 2016 15:38:59

shirll
Membru nou
Înregistrat: 02 Jan 2016
Mesaje: 3

Recursivitate cu siruri de caractere

Va rog sa ma ajutati cu o problema. Am crezut ca am rezolvat-o, dar nu returneaza nimic. Cred ca este o greseala in cod, dar nu stiu exact unde si am ramas fara idei..
Am pus mai jos enuntul si codul, multumesc anticipat.
a) Scrieți o funcție recursivă "litera" cu doi parametric s și c, unde s este un cuvânt, iar c este o literă. Functia returnează de câte ori apare litera c în cuvântul s.

Cod:

#include<stdio.h>
#include<string.h>
int litera(char s[20],char c[1])
{
    char *k;
    k=strchr(s,c);
    if(k==NULL)
        return 0;
    else
    {
        strcpy(s,s+(s-k)+1);
        return 1+litera(s,c);
    }

}
int main()
{
    char s[20],c[1];
    printf("s:"); gets(s);
    printf("c:"); gets(c);
    printf("%d",litera(s,c));
}

Offline

 

#2 02 Jan 2016 16:21:32

csilviu
Membru
Locaţie: Bistrita
Înregistrat: 31 Oct 2007
Mesaje: 495

Re: Recursivitate cu siruri de caractere

Sursa ta nu se compilează: al doilea argument al funcției strchr este de caracter (char), nu șir de caractere (char * sau char []). Ai două soluții:

[list]
[*] declari c de tip char (nu char c[2]) și folosești strchr - așa mi s-ar părea logic
[*] declari c de tip char [2] și folosești strstr
[/list]

Alte probleme:

[list]
[*] funcția strcpy are un comportament nepredictibil dacă parametri se suprapun (ce faci tu acolo, ștergând niște caractere din s). Soluția este să folosești un șir de caractere auxiliar.
[*] functia gets este nerecomandată - folosește fgets, așa: fgets(s, 20 , stdin);
[/list]

Și o sursă funcțională:

Cod:

#include<stdio.h>
#include<string.h>

int litera(char * s , char c)
{
    char *k = strchr(s , c);
    if(k == NULL)
        return 0;
    else
        return 1 + litera(k + 1 , c);
}
int main()
{
    char s[20],c;
    printf("s:"); fgets(s, 20 , stdin);
    printf("c:"); scanf("%c", & c);
    printf("%d", litera(s , c));
}

Offline

 

#3 02 Jan 2016 16:39:26

shirll
Membru nou
Înregistrat: 02 Jan 2016
Mesaje: 3

Re: Recursivitate cu siruri de caractere

Multumesc frumos pentru rezolvare si explicatii! smile

Offline

 
Feed

Antet forum

Powered by FluxBB