giocala88 (Normal User)
Expert
Messaggi: 248
Iscritto: 23/04/2008
|
Salve, vorrei capire e se possibile chiarire un dubbio...
Allora la seguente implementazine in ANSI C chiede di acquisire una stringa attraverso un ciclo for....Questa stringa deve contenere lettere o numeri e operatori di somma....tutto il resto non dve comparire o meglio si deve visualizzare un mex di errore....
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,
j,
*exp_disgiunte,
n_exp_disgiunte;
char exp[1000];
printf("\nAcquisire il numero di espressioni disgiunte: ");
scanf("%d",
&n_exp_disgiunte);
exp_disgiunte = (int *)calloc(n_exp_disgiunte,
sizeof (int));
for(i = 0; i < n_exp_disgiunte; ++i)
{
printf("\n%d^ Espressione: ", i+1);
scanf("%s",
exp);
while(exp == '\0');
printf("\n%s\n", exp);
for(j = 0; j <= '\0'; ++j)
{
if(exp[0] == '\0' &&
exp[j+1] == '+' ||
exp[j+2] == '+' &&
exp[j+2] != '*' &&
exp[j+5] != '*' &&
exp[j+8] != '*' &&
exp[j+11] != '*' &&
exp[j+14] != '*' &&
exp[j++] == '\0')
{
printf("\nEspressione acquisita correttamente...\n");
}
else
printf("\nL'espressione acquisita non e' corretta\n");
}
}
return 0;
}
Domanda: In riferimento all'istruzione if(exp[j+1]....) non c'è un modo più semplice per dire "se compare un carattere di '*' l'espressione non è corretta"?????....ho provato a a mettere if(exp[j] != '*') ma il risultato non cambia....è vera se '*' compare come è anche vera se non compare....come mai???...percaso sbaglio io qualcosa???...grazie anticipatamente...
|
|
gantonio (Normal User)
Guru^2
Messaggi: 1532
Iscritto: 09/09/2007
|
Ma questa if
if(exp[0] == '\0' &&
exp[j+1] == '+' ||
exp[j+2] == '+' &&
exp[j+2] != '*' &&
exp[j+5] != '*' &&
exp[j+8] != '*' &&
exp[j+11] != '*' &&
exp[j+14] != '*' &&
exp[j++] == '\0')
cosa vorrebbe dire???
|
|
giocala88 (Normal User)
Expert
Messaggi: 248
Iscritto: 23/04/2008
|
In effetti non ha senso....anche nell'implementazione un senso ce l'ha....chiedo proprio se qualcuno sarebbe in grado di rendere "sensata" quell'istruzione if...spero di essere stato chiaro nell'esporre il problema...
La stringa deve cotenere solo operatori additivi...lettere e numeri....grazie ancora...
|
|
()
Newbie
Messaggi:
Iscritto:
|
provo a darti una soluzione, per confrontare dei caratteri in una stringa con l'ANSI C si fa cosi:
int i;
for (i=0;str[ i]!='\0';i++)
{
/* if ((str[ i]!='a') || (str[ i]!='b') || (str[ i]!='c') || (str[ i]!='d') || .. .. ..) e continui con tutte le letere che possono essere accettate oppure fai la cosa inversa cioe
if (str[ i]=='{') || (str[ i]=='^') || (str[ i]=='#') || .. .. .. e cosi via con tutti i simboli non permessi
*/
str[ i]=' ';
/* al posto del carattere sbagliato gli mette uno spazio */
}
le due IF hanno lo stesso risultato, sta a te scegliere la piu corta da scrivere!
prima dela i non ci va lo spazio ma sono stato costretto a inserirlo perchè altimenti non si leggeva!!
Ultima modifica effettuata da il 30/06/2008 alle 23:30 |
|
FHF93 (Ex-Member)
Pro
Messaggi: 132
Iscritto: 13/11/2007
|
Trovo il tuo metodo molto prolisso e sconveniente .
La stringa deve contenere solo operatori additivi ( intendi il segno + ?? ) , lettere e numeri ? bene ci sono varie possibilita'
ti fai una funzione che controlli che la stringa sia corretta
Codice sorgente - presumibilmente C++ |
#include <stdio.h> #include <ctype.h> ... ... ... /*Ritorna 0 se la stringa non è valida , 1 se è corretta*/ int Verify ( char * str ) { for ( ; *str ; str++ ) if ( !isdigit ( *str ) && !isalpha ( *str ) && *str != '+' ) return 0 ; return 1 ; }
|
Alternativa nel caso vuoi farti da te le istruzioni isdigit e isalpha
Codice sorgente - presumibilmente C++ |
#include <stdio.h> ... ... /*Verifica attraverso il codice ASCII che si tratti di un numero*/ int _isDigit ( char a ) { return ( a - '0' >= 1 && a - '0' <= 9 ) ? 1 : 0 ; } /*Veifica attraverso il codice ASCII che si tratti di una lettera*/ int _isAlpha ( char a ) { return ( ( a >= 65 && a <= 90 ) || ( a >= 97 && a <= 122 ) ) ? 1 : 0 ; } /*Ritorna 0 se la stringa non è valida , 1 se è corretta*/ int Verify ( char * str ) { for ( ; *str ; str++ ) if ( !_isDigit ( *str ) && !_isAlpha ( *str ) && *str != '+' ) return 0 ; return 1 ; }
|
Ultima modifica effettuata da FHF93 il 01/07/2008 alle 1:53 |
|
giocala88 (Normal User)
Expert
Messaggi: 248
Iscritto: 23/04/2008
|
Innazitutto volevo ringraziare tutti pr l'interessamento....anche ho delle difficoltà con l'ultimo consgilio datomi....
Qualcuno sa dirmi come mai non va come dovrebbe???
Codice sorgente - presumibilmente Plain Text |
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int Verify ( char * str );
int main()
{
int i,
j,
*exp_disgiunte,
n_exp_disgiunte;
char exp[1000];
printf("\nAcquisire il numero di espressioni disgiunte: ");
scanf("%d",
&n_exp_disgiunte);
exp_disgiunte = (int *)calloc(n_exp_disgiunte,
sizeof (int));
for(i = 0; i < n_exp_disgiunte; ++i)
{
printf("\n%d^ Espressione: ", i+1);
scanf("%s",
exp);
while(exp == '\0');
Verify(exp);
printf("\n%s\n", exp);
}
return 0;
}
/*Ritorna 0 se la stringa non è valida ,
1 se è corretta*/
int Verify ( char * str )
{
for ( ; *str ; str++ )
if ( !isdigit ( *str ) &&
!isalpha ( *str ) &&
*str != '+' )
{
printf("\nL'espressione non e' corretta\n");
return 0 ;
}
else
{
printf("\nL'espressione e' corretta\n");
return 1 ;
}
}
|
|
FHF93 (Ex-Member)
Pro
Messaggi: 132
Iscritto: 13/11/2007
|
Farei
Codice sorgente - presumibilmente C++ |
#include <stdio.h> #include <stdlib.h> #include <ctype.h> int Verify ( char * str ); int main() { int i, j, *exp_disgiunte , n_exp_disgiunte; char exp[1000]; printf("\nAcquisire il numero di espressioni disgiunte: "); scanf("%d" , &n_exp_disgiunte); exp_disgiunte = (int *)calloc(n_exp_disgiunte, sizeof (int)); for(i = 0; i < n_exp_disgiunte; ++i) { printf("\n%d^ Espressione: ", i+1); scanf("%s", exp); printf("\nEspressione : %s\n", exp); if ( Verify(exp) ) { printf ( "\nL'espressione inserita e' corretta\n" ); } else { printf ( "\nL'espressione inserita non e' corretta\n" ) ; } } return 0; } /*Ritorna 0 se la stringa non è valida , 1 se è corretta*/ int Verify ( char * str ) { for ( ; *str ; str++ ) if ( !isdigit ( *str ) && !isalpha ( *str ) && *str != '+' ) return 0 ; return 1 ; }
|
|
|
giocala88 (Normal User)
Expert
Messaggi: 248
Iscritto: 23/04/2008
|
Ringrazio tutt per l'aiuto...grazie mille
|
|
giocala88 (Normal User)
Expert
Messaggi: 248
Iscritto: 23/04/2008
|
è possibile implementare un algoritmo o una funzione che conti le sole lettere dell'alfabeto in riferimento al mio problema esposto in "if....valutazione errata..."???
Ringrazio tutti anticipatamente...ciao.....
Ultima modifica effettuata da giocala88 il 02/07/2008 alle 9:41 |
|