Confrontare array di array di caratteri

di il
24 risposte

Confrontare array di array di caratteri

Salve,
da quanto ho capito (poco) un array di stringhe in realtà non è altro che un array di array di caratteri,

dunque

se per confrontare due stringhe si possono usare funzioni come strcmp , come faccio se invece ho array di array di caratteri? posso usare ugualmente tali funzioni?

dato il mio file sorgente :
#include <iostream>
#include "func.h"
#include <fstream>
using namespace std;

void inserisciInArray(vettore & v, int & r){
	fstream in;
	in.open("/Users/Genna/Desktop/prova per l'esame/nomi.txt",ios::in);
if(!in)
	cout<<"il file non è presente";
else {
	int r=0;

	while (!in.eof()){
	in>>v[r];
	r++;
	}
	cout<<"\n La stampa del vettore è :\n";
	for (int i=0;i<r;i++)
		cout <<v[i]<<endl;



}

	in.close();
}
con rispettivo header


#define N 100
typedef char stringa[N];
typedef stringa vettore [N];

void inserisciInArray(vettore & v, int & r);

#endif
come posso contare le occorrenze del file caricato? (quindi come posso vedere se ci sono 2 o più nomi uguali)

24 Risposte

  • Re: Confrontare array di array di caratteri

    Ragà sono bloccato qui, tutti gli esser d'esame del mio prof prevedono in qualche modo questi confronti, help me please !
  • Re: Confrontare array di array di caratteri

    E nemmeno questo riesco a compilarlo >.< comunque non puoi fare così?
    string nomi[100];
    while (!in.eof()){
       in>>nomi[r];
       r++;
    }
    e dopo confronti con il semplice operatore == es if(nomi[2]==nomi[3]
    {
    ...
    }...
  • Re: Confrontare array di array di caratteri

    E infatti così era la mia idea, ma come faccio a confrontare tutte le setringhe tra loro?

    int occottenza =0;
    string nomi[100];
    while (!in.eof()){
    in>>nomi[r];
    r++;
    }
    if( se due stringhe sono uguali){
    occorrenza++;
    }
  • Re: Confrontare array di array di caratteri

    Eh.. bella domanda ci vogliono un paio di cicli while o for e poi non so ci penso un po' xD
  • Re: Confrontare array di array di caratteri

  • Re: Confrontare array di array di caratteri

    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    int main()
    {
        string nome[100];
        int i=0,x=0,max=0,occorrenza[100],e=0;
    
        fstream in;
        in.open("nomi.txt",ios::in);
    
        while(i!=100)
        {
            occorrenza[i]=1;
            i++;
        }
    
        while(in>>nome[max])
        {
          max++;
        }
    
    i=0;
    
        while (i!=max)
        {
            x=(i+1);
    
            while(x<max)
            {
                if(nome[i]==nome[x])
                {
                    occorrenza[i]++;
                    nome[x]="";
                }
                x++;
            }
        i++;
       }
       i=0;
    
       while(i!=max)
       {
           if(nome[i]!="")
       {
           cout<<nome[i]<<"    "<<occorrenza[i]<<endl;
       }
       i++;
    
       }
    }
    
    come sempre ti ricordo che non sono esperto e non so se il tuo professore accetterebbe i codici che scrivo io xD
  • Re: Confrontare array di array di caratteri

    Dovrei aver risolto (in parte) con questo algoritmino:
    for(int i=0;i<r;i++){
    		for(int j=0;j<r;j++)
    			if(v[i]==v[j])
    				occorrenza++;
    	}
    	
    	
    ma eseguendo il programma, prima mi stampa il mio array:

    La stampa del vettore è :
    carlo
    gianna
    massimo
    carlo
    gianna
    gianna
    ada
    marta
    ada


    poi dopo circa 7 secondi mi calcola le occorrenze, ma il numero è ovviamente errato:

    ho trovato 32767occorrenze
  • Re: Confrontare array di array di caratteri

    Mhh sicuro di aver dato ad r il giusto valore? hai azzerato occorrenza?
  • Re: Confrontare array di array di caratteri

    Risolto decrementando dov'è indicato le occorrenze, ma sarà il modo migliore

    #include <iostream>
    #include "nomi.h"
    using namespace std;
    
    void inserisciInelenco(Elenco & e,int & r){
    cout<<"\n Quanti nomi vuoi inserire? \n";
    cin>>r;
    
    for(int i=0;i<r;i++){
    	cout<<"\ninserisci il "<<i+1<<"° nome : ";
    	cin>>e[i];
    	}
    for(int i=0;i<r;i++)
    	cout<<e[i]<<endl;
    }
    
    
    void calcolaOcc( Elenco e,int r){
    	int occ=0;
    	for (int i=0;i<r;i++){
    		for (int j=0;j<r;j++)
    			if (strcmp(e[i],e[j])==0)
    				occ++;
    		occ--;//<---------------------------------------------qui
    	}
    	cout<<"\nci sono "<<occ<<" nomi ripetuti \n";
    }
    
  • Re: Confrontare array di array di caratteri

    poel ha scritto:


    Risolto decrementando dov'è indicato le occorrenze, ma sarà il modo migliore

    #include <iostream>
    #include "nomi.h"
    using namespace std;
    
    void inserisciInelenco(Elenco & e,int & r){
    cout<<"\n Quanti nomi vuoi inserire? \n";
    cin>>r;
    
    for(int i=0;i<r;i++){
    	cout<<"\ninserisci il "<<i+1<<"° nome : ";
    	cin>>e[i];
    	}
    for(int i=0;i<r;i++)
    	cout<<e[i]<<endl;
    }
    
    
    void calcolaOcc( Elenco e,int r){
    	int occ=0;
    	for (int i=0;i<r;i++){
    		for (int j=0;j<r;j++)
    			if (strcmp(e[i],e[j])==0)
    				occ++;
    		occ--;//<---------------------------------------------qui
    	}
    	cout<<"\nci sono "<<occ<<" nomi ripetuti \n";
    }
    
    ehm ma funziona??
  • Re: Confrontare array di array di caratteri

    Adesso sto provando a testare se sono in ordine ponendo come condizione strcmp ==1

    ma non funziona, se sono in ordine o meno mi risulta sempre che sono in ordine, secondo te perché?
    void ordinaNomi( Elenco e,int r){
    
    	bool ordine = false;
    	for(int i=0;i<r;i++){
    		for (int j=0;j<r;j++)
    			if(strcmp(e[i],e[j])==1)
    				ordine=true;
    		}
     if(ordine)
    	 cout<<"\n sono in ordine \n";
     
     else cout<<"\n non sono in ordine \n";
    
    }
  • Re: Confrontare array di array di caratteri

    Non ho capito in che modo vedresti se sono in ordine? (che ordine intendi poi? xD alfabetico?)
  • Re: Confrontare array di array di caratteri

    Se sono stringhe dovrebbe vedermele come tali e quindi (da quanto ho capito ) è l'ordine di comparsa nel codice ascii.
    così posso comparare anche numeri e lettere.
  • Re: Confrontare array di array di caratteri

    Prova così
    
    void ordinaNomi( Elenco e,int r){
    
       bool ordine = true;
       for(int i=0;i<r;i++){
          for (int j=0;j<r;j++)
             if(strcmp(e[i],e[j])<0)
                ordine=false;
          }
    if(ordine==true)
        cout<<"\n sono in ordine \n";
    
    else cout<<"\n non sono in ordine \n";
    
    }
Devi accedere o registrarti per scrivere nel forum
24 risposte