Confronto tra stringhe

di il
9 risposte

Confronto tra stringhe

Salve, ho un probema con un esercizio dove chiede il confronto tra stringhe praticamente; qui di seguito il testo dell'esercizio:

Specifiche
Aiuta XaRt23 e RoOt45 a trovare il pianeta più grande della galassia. XaRt23 possiede una lista con tutti i diametri dei pianeti presenti nella galassia. L’unità di misura utilizzata nel loro pianeta è il Quar, relativamente piccola, per cui i numeri che descrivo tali diametri sono molto grandi. Scrivi un programma che possa trovare tra tutti i numeri presenti nella lista, quello più grande.
Il file di input contiene 100 task, uno per ogni riga. Ogni riga contiene N+1 valori, separati da uno spazio. Il primo valore corrisponde al numero N di pianeti presenti nella lista. I successivi N valori rappresentano le dimensioni (in Quar) dei diametri dei relativi pianeti.
Il file di output conterrà 100 righe. Ogni riga conterrà un unico valore, ovvero il diametro maggiore tra tutti quelli contenuti nella lista dell'input corrispondente.

Note
il numero N è sempre minore o uguale a 1000;
le dimensioni dei diametri sono numeri interi con, al massimo, 40 cifre.

Esempio
input.txt:
4 3276525753254764275125712 78328263214764866843884 3868328634286863486386784 347634764376754375
6 2345 1823 2344 1643 2352 123
3 25378299384 21452671827 25378299391

output.txt
3868328634286863486386784
2352
25378299391

qui di seguito il mio codice dove in output mi da giusti solo le prime due task, poi per la terza task in poi mi da 0 e non capisco il perchè.

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(){
	int N;
	string max;
	string x,y;
	for(int i=0; i<4; i++){
		leggi>>N;
		max="0";
		for(int j=0; j<N; j++){
			leggi>>x>>y;
			if(x.size()>y.size()){
				max=x;
			}
		}
		cout<<max<<endl;
	}
}

vi ringrazio anticipatamente.

9 Risposte

  • Re: Confronto tra stringhe

    Cosa è

    leggi

    ?

    Perché leggi x e y a coppia?
    Quando scrivi?

    Sicuro che non manchi del codice?
  • Re: Confronto tra stringhe

    Si scusami mi sono accorto dell'errore e l'ho modificato, mi sono avvicinato ma mi da ancora errori con quest'altro input, in alcune task non fa il confronto come dovrebbe
    2 90 78
    3 231435 45 76
    4 32 78 77 6
    5 23 90 78 4 5
    6 43 12 33 65 87 98
    questo invece è il codice :
    
    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;
    ifstream leggi("input.txt");
    ofstream scrivi("output.txt");
    int main(){
    	int N;
    	string max;
    	string x;
    	for(int i=0; i<5; i++){
    		max="0";
    		leggi>>N;
    		for(int j=0; j<N; j++){
    			leggi>>x;
    			if(max.size()<=x.size(){
    				max=x;
    			}
    		}
    		scrivi<<max<<endl;
    	}
    }
    
    
  • Re: Confronto tra stringhe

    Ovvero che intendi esattamente?
  • Re: Confronto tra stringhe

    oregon ha scritto:


    Ovvero che intendi esattamente?
    ad esempio nella task dove ci sono 90 e 78 mi da in output 78 quando invece dovrebbe darmi 90
  • Re: Confronto tra stringhe

    Ovvio. Tu valuti la lunghezza e sono di due cifre. Se vuoi valutare il valore devi trasformare le stringhe in numeri e confrontare i valori.
  • Re: Confronto tra stringhe

    oregon ha scritto:


    Ovvio. Tu valuti la lunghezza e sono di due cifre. Se vuoi valutare il valore devi trasformare le stringhe in numeri e confrontare i valori.
    non posso perchè essendo numeri con molte cifre (fino a 40) non riesce a leggerle int o long quindi devo per forza lavorare con le stringhe
  • Re: Confronto tra stringhe

    Quindi le cose si complicano... quando trovi una stringa della stessa lunghezza del max devi confrontare i singoli caratteri (dal primo a sinistra verso destra) per trovare il maggiore. Ti consiglio di impostare una funzione che faccia tale confronto tra due stringhe di eguale lunghezza.
  • Re: Confronto tra stringhe

    Visto che si usano stringhe, e non array di altri tipi dati, la funzione esiste già: strcmp(stringa1, stringa2), che ritorna -1 se la prima stringa viene prima della seconda, +1 se é l'opposto, o 0 se sono uguali (mi sembra, ma forse sono scambiati). É in string.h. Chiaramente va usata solo se sai già che le stringhe hanno pari lunghezza
  • Re: Confronto tra stringhe

    silente ha scritto:


    Visto che si usano stringhe, e non array di altri tipi dati, la funzione esiste già: strcmp(stringa1, stringa2), che ritorna -1 se la prima stringa viene prima della seconda, +1 se é l'opposto, o 0 se sono uguali (mi sembra, ma forse sono scambiati). É in string.h. Chiaramente va usata solo se sai già che le stringhe hanno pari lunghezza
    Qui di parla di std::string e non di stringhe C-style, quindi la funzione da usare sarebbe compare() o anche gli overload degli operatori relazionali.
Devi accedere o registrarti per scrivere nel forum
9 risposte