
Forumul dedicat sistemului de operare Ubuntu în România
Forumul Ubuntu România
Forumul de discuții și asistență al comunității Ubuntu din România
Forumul dedicat sistemului de operare Ubuntu în România
Forumul de discuții și asistență al comunității Ubuntu din România
Neautentificat.
Pagini: 1
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.
#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
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ă:
#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
Multumesc frumos pentru rezolvare si explicatii!
Offline
Pagini: 1