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

Tarrapunchia

Nuovo Utente
1
0
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:

Andretti60

Utente Èlite
5,811
4,402
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
 

Moffetta88

Moderatore
Staff Forum
Utente Èlite
17,038
10,121
CPU
i5-4690
Dissipatore
DEEPCOOL CAPTAIN 240EX
Scheda Madre
MSI Z97 U3 PLUS
HDD
KINGSTON SSD KC400 240GB
RAM
24GB BALLISTIX SPORT @2133MHz
GPU
STRIX GTX980 DC2OC
Audio
INTEGRATA
Monitor
AOC G2590VXQ
PSU
BEQUIET! System Power 7 500W
Case
DEEPCOOL MATREXX 55
Periferiche
NESSUNA
Net
FTTC FASTWEB
OS
UBUNTU/WINDOWS10
@Tarrapunchia ti ho corretto il tag. Quando devi mostrare del codice ricordati di usare il TAG CODE e non QUOTE ^__^

Ora tutto più leggibile 👍
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando

Discussioni Simili