Problema programmazione in c89 sulla ricerca di parole palindrome in un file txt

Pubblicità

Tarrapunchia

Nuovo Utente
Messaggi
1
Reazioni
0
Punteggio
1
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
?
?

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:
Molti errori il primo dei quali è nella funzione palindroma in quanto effettui in return al primo passo del ciclo. Se le lettere sono diverse puoi subito ritornare un zero, altrimenti devi continuare il ciclo (che puoi limitare a metà della lunghezza della parola)
Per il testo la formattazione non ben chiara, difficile per me leggere su uno smartphone, devi usare il tag CODE
 
Pubblicità
Pubblicità
Indietro
Top