#include<stdio.h>
#include<ctype.h>
#define MAX 300
int len(char *s)
{
int i=0;
while(s[i]!='\0')
i++;
return i;
}
int negativo(char* str)
{
int i,j,l,counternon=0,counterfalse=0,countergen=0, countergen1=0, countergen2=0, countergen3=0;
char* A="NON";
char* B="FALSO";
for(i=0;i<len(str);i++)
{
str[i]=toupper(str[i]);
if(isalpha(str[i])==0) //se è un carattere speciale mettilo uguale a zero
str[i]='0';
}
printf("\n%s\n",str);
for(i=0;i<len(A);i++) //questa prima parte è se NON è a inizio stringa
{
if( str[i]==A[i] )
countergen1++;
}
if (countergen1==3)
{
if( str[len(A)]=='0' || str[len(A)]=='\0' )
counternon++;
}
for(i=0;i<len(B);i++) //questa prima parte è se FALSO è a inizio stringa
{
if( str[i]==B[i] )
countergen2++;
}
if (countergen2==5)
{
if( str[len(B)]=='0' || str[len(B)]=='\0' )
counterfalse++;
}
for(i=0;i<len(str);i++) //questa se NON è in mezzo o per ultima parola
{
countergen=0;
if (str[i]=='0')
{
for( j=0;j<len(A);j++ )
{
if (A[j]==str[i+1+j])
countergen++;
}
if(countergen==len(A))
{
if (str[i+4] =='0' || str[i+4]=='\0')
counternon++;
}
}
}
for(i=0;i<len(str);i++) //questa se FALSO è in mezzo o per ultima parola
{
countergen3=0;
if (str[i]=='0')
{
for( j=0;j<len(B);j++ )
{
if (B[j]==str[i+1+j])
countergen3++;
}
if(countergen3==len(B))
{
if (str[i+6] =='0' || str[i+6]=='\0')
counterfalse++;
}
}
}
printf("\n%d falso e %d non", counterfalse, counternon);
if( (counternon + counterfalse)%2 == 0 )
return 0;
return 1;
}
int main()
{
char str[MAX], c;
int i=0;
puts("Inserisci una linea di testo:\n");
while((c=getchar())!='\n')
str[ i++ ] = c;
str[i] = '\0'; /* termina la stringa */
printf("\nLa funzione ritorna:\n%d\n", negativo(str));
return 0;
}
ho risolto così, però sono molto insoddisfatto e scoraggiato.. non riesco a capire come gestire al meglio gli strumenti che ho per poter scrivere un buon codice ed elegante e non così esteso per esercizi così banali.. è vero che le consegne che mi vengono date sono molto restrittive (non potendo usare string.h tutti i paragoni tra stringhe devo farmeli con cicli if e for) però mi sembra di ricercare sempre la strada più contorta per arrivare alla soluzione e questo mi fa sentire un idiota. Magari molti storceranno il naso a vedere una schifezza di codice scritto così (eppur funziona)..
Ho dovuto "disobbedire" alla consegna di usare scanf in quanto digitando una stringa del tipo "il nonno non è vero" al primo spazio scanf mi considera la mia stringa solo come "il" e quindi ecco getchar.
Sarei davvero grato di poter imparare da molti di voi che fanno di questa materia un'arte e uno strumento molto potente.
Buon week-end a tutti e alla prossima.