Salve a tutti, sto avendo un problema con un esercizio in c ed onestamente non sto capendo un granché dove sia l'errore:
"Un file di lunghezza non nota a priori (il cui nome venga richiesto in input) contiene un testo generico (vedere esempio) con punteggiatura. Ogni riga è composta al massimo di 512 caratteri (escluso il \0). Si scriva un programma C89 in grado di individuare tutte le parole palindrome di almeno 3 caratteri, indipendentemente dalle maiuscole/minuscole. Una parola è palindroma se si può leggere identica nei due sensi, es. Kayak). Per determinare se una stringa è palindroma si scriva una funzione con il seguente prototipo:
int palindroma(char s[]);
che restituisca 0 se s non è palindroma, 1 se lo è e sia indipendente dalle maiuscole/minuscole. In output su video vengano scritte le parole palindrome trovate (con le stesse maiuscole/minuscole presenti nel file) precedute dal numero di riga (la prima riga sia la numero 1), seguite dal numero totale di parole trovate. Vedere l’esempio.
Esempio di file di input:
Oggi e' venerdi'.
L'anilina e' un colorante innocuo.
Aveva disceso le rapide in Kayak!
Il "RADAR" funziona attraverso la riflessione delle onde elettromagnetiche.
In questa riga non ci sono parole palindrome?
E in questa?
Esempio di output:
2: anilina
3: Aveva
3: Kayak
5: RADAR
6: non"
il programma gira perfettamente per valori di N fino a 208 (????)
se aumento il valore di N (fino a 512 come richiesto, per esempio) mi stampa a schermo l'output corretto MA restituisce errore.
qualcuno ci capisce qualcosa
?
"Un file di lunghezza non nota a priori (il cui nome venga richiesto in input) contiene un testo generico (vedere esempio) con punteggiatura. Ogni riga è composta al massimo di 512 caratteri (escluso il \0). Si scriva un programma C89 in grado di individuare tutte le parole palindrome di almeno 3 caratteri, indipendentemente dalle maiuscole/minuscole. Una parola è palindroma se si può leggere identica nei due sensi, es. Kayak). Per determinare se una stringa è palindroma si scriva una funzione con il seguente prototipo:
int palindroma(char s[]);
che restituisca 0 se s non è palindroma, 1 se lo è e sia indipendente dalle maiuscole/minuscole. In output su video vengano scritte le parole palindrome trovate (con le stesse maiuscole/minuscole presenti nel file) precedute dal numero di riga (la prima riga sia la numero 1), seguite dal numero totale di parole trovate. Vedere l’esempio.
Esempio di file di input:
Oggi e' venerdi'.
L'anilina e' un colorante innocuo.
Aveva disceso le rapide in Kayak!
Il "RADAR" funziona attraverso la riflessione delle onde elettromagnetiche.
In questa riga non ci sono parole palindrome?
E in questa?
Esempio di output:
2: anilina
3: Aveva
3: Kayak
5: RADAR
6: non"
il programma gira perfettamente per valori di N fino a 208 (????)
se aumento il valore di N (fino a 512 come richiesto, per esempio) mi stampa a schermo l'output corretto MA restituisce errore.
qualcuno ci capisce qualcosa
C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 208
int palindroma(char s[]);
int main()
{
FILE* fp;
int i, c, riga;
char stringa[N+1];
char parola[N+1];
char f_input[N];
riga = 1;
printf("Inserire il nome del FILE di imput: ");
scanf("%s", f_input);
fp = fopen(f_input, "r");
if (fp == NULL) {
printf("Errore nella lettura del file.\n");
return 1;
}
while (fgets(stringa, N, fp) != NULL){
c = 0;
i = 0;
while (i <= strlen(stringa)){
c = 0;
while (isalpha(stringa[I])) {
parola[c] = stringa[I];
c++;
i++;
}
parola[c] = '\0';
if (strlen(parola) >= 3 && palindroma(parola)) {
printf("%d: %s\n", riga, parola);
}
while (!isalpha(stringa[I]))
i++;
}
riga++;
}
fclose(f_input);
return 0;
}
int palindroma (char s[])
{
int i, l_parola;
l_parola = strlen(s);
for (i = 0; i < l_parola; i++, l_parola--){
if (tolower(s[I]) != tolower(s[l_parola-1]))
return 0;
else
return 1;
}
}
Ultima modifica da un moderatore: