Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C] confronto tra stringhe

    Ciao ragazzi.. scusate se chiedo sempre aiuto ma ne ho davvero bisogno. Devo fare un esercizio il cui testo è:
    "Dato un file di testo (ingresso.txt) che contiene in ogni riga due stringhe(senza spazi separatori) scrivere nel file di uscita (uscita.txt) la stringa la cui lunghezza è maggiore(nel caso siano uguali scrivere la prima delle due). Nota: la lunghezza massima della stringa è 128 caratteri."
    Sotto al testo c'è l'esempio di un file elenco.txt cosi composto:
    Michele Carmelo
    Carmelo Giovanni
    Anna Giuseppe
    Giuseppe Anna
    Giancarlo Giada
    Luisa Annalisa

    Ora io non ho capito se non ci devono essere spazi separatori tra una riga e l'altra com'è nel file di esempio elenco.txt che ho scritto oppure non ci devono essere spazi tra un nome e l'altro. Io ho fatto l'esercizio creando il file di ingresso così come nell'esempio e sono riuscito a fare funzionare il programma però se tolgo gli spazi tra un nome e l'altro il programma non funziona più. Vi posto il mio codice e vorrei capire se l'esercizio l'ho fatto bene o se non ci devono essere spazi tra i nomi e quindi il codice è stato scritto male. Attendo vostra risposta. Grazie mille.

    codice:
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<ctype.h>
    
    
    main(){
        //inizio dichiarazioni
        FILE* pi;
        FILE* pu;
        char s1[128],s2[128];
        int n,i,limite;
    
    
        //fine dichiarazioni
        pi=fopen("elenco.txt","r");
        if(pi==NULL){perror("Il file non esiste!"); exit(1);}
        pu=fopen("uscita.txt","w");
        printf("Le stringhe lette da file sono:\n\n");
        for(n=0;n<=128;n++){
        limite=fscanf(pi,"%s%s",&s1,&s2);
        if(limite==EOF) break;
        printf("%s %s\n",s1,s2);
        if(strlen(s1)==strlen(s2)){ fprintf(pu,"%s\n",s1); printf("Le stringhe sono uguali, scrivo la prima: %s\n\n",s1);}
        else if(strlen(s1)>strlen(s2)){ fprintf(pu,"%s\n",s1); printf("La stringa piu lunga e':%s\n\n",s1);}
        else if(strlen(s1)<strlen(s2)){ fprintf(pu,"%s\n",s2); printf("La stringa piu lunga e':%s\n\n",s2);}
        }
        fclose(pi);
        if(pu==NULL){perror("Errore!"); exit(1);}
        else printf("\nIl file uscita e' stato creato correttamente.\n\nFine Programma.\n");
        fclose(pu);
        
    
    
        
    }

  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551
    OFF TOPIC

    Noto spesso che più della difficoltà di risolvere un esercizio è la difficoltà di interpretare la traccia
    La traccia si potrebbe interpretare, due stringhe ognuna formata da un unica parola.

    Esempio:
    NOME COGNOME, sono due stringhe che non contengono spazi.
    CIAO MONDO - IL SOLE, sono due stringhe "ciao mondo" e "il sole" che contengono spazi, è possibile dato l'esempio del file, che tu abbia seguito l'approccio giusto, tuttavia 128 non sono il numero di righe del file ma il numero massimo di caratteri di una stringa array[128], quindi rivedrei il ciclo di lettura file
    Ultima modifica di torn24; 18-07-2015 a 09:03 Motivo: Completamento messaggio
    Tecnologia

  3. #3
    Quindi le due variabili char [128] vanno bene o no? dovrei modificare il ciclo for? Se si come? grazie per l'aiuto comunque..

  4. #4
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    si, array 128 caratteri va bene!

    Per il ciclo lettura file pensavo ad un ciclo while, anche se il tuo for e break è perfettamente funzionante.

    Aspetta consigli dai professionisti, io ti propongo una soluzione...
    codice:
    while((limite=fscanf(pi,"%s%s",&s1,&s2))!=EOF){
        printf("%s %s\n",s1,s2);
        if(strlen(s1)==strlen(s2)){ fprintf(pu,"%s\n",s1); printf("Le stringhe sono uguali, scrivo la prima: %s\n\n",s1);}
        else if(strlen(s1)>strlen(s2)){ fprintf(pu,"%s\n",s1); printf("La stringa piu lunga e':%s\n\n",s1);}
        else if(strlen(s1)<strlen(s2)){ fprintf(pu,"%s\n",s2); printf("La stringa piu lunga e':%s\n\n",s2);}
        }
    Ultima modifica di torn24; 18-07-2015 a 12:02
    Tecnologia

  5. #5
    codice:
    char s1[130],s2[130];
    
    while ( fgets(s1,130,f1) && fgets(s2,130,f2) )
        fputs( (strlen(s1) >= strlen(s2)) ? s1 : s2, f3);
    insomma usa fgets, fputs e sei a cavallo.
    Easy framework framework per il linguaggio c
    MagixCubic un cli puzzle game
    Bigt Google traduttore per bash con aggiunta di notify

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.