Stringa

di il
3 risposte

Stringa

Ciao a tutti !
Potreste darmi una mano con questo esercizio :
"Letta una stringa S di n = 1 caratteri appartenenti all’alfabeto A, verificare che S sia una espressione ben formata"
Alfabeto A = {a,b}
Ben formata = il numero di caratteri 'a' deve essere uguale al numero di caratteri 'b' , e per ogni indice della stringa il numero di caratteri 'a' deve
essere maggiore o uguale al numero di caratteri 'b'

Questo è il mio codice:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAX 100

int verifica1(char s[MAX],int n){
int i,cont=0,flag=0;
for(i=0;i<n;i++){
    while(cont>=0){
        if(s[i]='a')
            cont++;
        else
            cont--;
    }
    }
    if(cont>=0)
        flag=1;
    return(flag);
}

int verifica2(char s[MAX],int n){
int i,cont1=0,cont2=0,flag=0;
for(i=0;i<n;i++){
    if(s[i]='a')
    cont1++;
else
    cont2++;
}
if(cont1==cont2)
    flag=1;
return(flag);
}

int main(void){
char s[MAX];
int n;
printf("Inserisci una parola nell'alfabeto A : ");
scanf("%s",s);
n=strlen(s);
if(verifica1(s,n)==1 && verifica2(s,n)==1)
    printf("s e' una stringa ben formata");
    else
    printf("s non e' una stringa ben formata");
return(0);
}
Se inserisco aabbab mi dice che non è una stringa ben formata
Dove sbaglio ?
Grazie mille

3 Risposte

  • Re: Stringa

    if(s[i]='a')
    questo controllo è sbagliato
    dopodiché devi comunque aggiustare il codice di verifica1 perché il while continuerebbe fino all'overflow di cont. Prova semplicemente con due cicli for
  • Re: Stringa

    Io invece, didatticamente, farei unafunzione che, passata una stringa e un carattere generico, conta quanti caratteri ci sono.

    Poi farai un conta le a, conta le b, e poi prendi tante belle decisioni.

    Ovviamente questo ha complessità mn anziché n, ma d'altronde bisogna che impari a gattonare, prima di correre
  • Re: Stringa

    Alcune considerazioni:
    - non bisogna controllare che la stringa contenga soltanto caratteri appartenenti all'alfabeto A?
    - la variabile n è superflua... come si fa a capire quando una stringa è terminata?
    - per la cronaca il tutto può essere fatto in un'unica funzione che scorre la stringa un'unica volta e con l'ausilio di un'unica variabile intera.

    @+m2+
    seguendo il tuo consiglio non potrebbe mai controllare che per ogni indice della stringa il numero di caratteri 'a' sia maggiore o uguale al numero di caratteri 'b'.
Devi accedere o registrarti per scrivere nel forum
3 risposte