Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    [c++]evidenziare quante e quali occorrenze sono presenti + volte in un vector...

    Avrei necessità di evidenziare quante e quali occorrenze sono presenti + volte in un vector...

    es.

    dato un vector<string>vectordiesempio = ("A","B","B","C","D","E","E","E","F")
    vorrei ottenere un output di questo tipo:

    A: 1 volta
    B: 2 volte
    C: 1 volta
    D: 1 volta
    E: 3 volte
    F: 1 volta

    Grazie a tutti/e


  2. #2
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    Per adesso avrei pensato a questa alternativa...

    codice:
    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    int main (int argc, char *argv[])
    {
      
      //vector <int> valori[10];
      
      
      int contatorepresenze;
    
    int array_dieci[10] = {1,3,7,2,3,4,5,6,1,7};
      
      
      for (int i=0; i<10;i++) {
       
       cout << array_dieci[i];
       
       //ordino gli elementi...
       
       //----------------------
    
       if (array_dieci[i]==array_dieci[i+1]) {
       
                                
        //cout << array_dieci[i];
        cout << "VALORE DUPLICATO!";
        cin.get();  
      
      }                           
    
      
      }    
      
      cout << "Press ENTER to continue..." << endl; 
      cin.get();
      return 0;
    }
    Ma adesso non so come ordinare gli elementi dell'array VVoVe:
    Ho provato con qsort ma non ci riesco...

    Thanks!

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Come hai usato qsort? Comunque questo l'ho appena scritto e testato, ordina correttamente l'array. Vedi se può esserti utile.

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    int comparator(const void *a, const void *b) {
      return *(int*)a - *(int*)b;
    }
    
    int main(int argc, char **argv) {
        const int SIZE = 10;
        int array_dieci[SIZE] = {1, 3, 7, 2, 3, 4, 5, 6, 1, 7};
        
        printf("PRIMA: ");
        for (int i = 0; i < SIZE; i++) {
            printf("%d ", array_dieci[i]);
        }
        
        qsort(array_dieci, SIZE, sizeof (int), comparator);
        
        printf("\nDOPO.: ");
        for (int i = 0; i < SIZE; i++) {
            printf("%d ", array_dieci[i]);
        }
        
        printf("\n");
        
        return 0;
    }
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    Grazie ma ho quasi risolto... ricorrendo ai vector...

    Quasi... perchè mi sto arrovellando per capire per quale motivo in fase di compilazione non mi dia nessun error e poi in run time.. arriva fino ad un certo punto e qui:

    codice:
    
    for (int i=0; i<MISURAVECTOR;i++) {
       
       cout << EVIDENZIAQUANTIVALORIMULTIPLI[i];
       cout << "\n";
       int w = i+1;
     
      if (EVIDENZIAQUANTIVALORIMULTIPLI[i]==EVIDENZIAQUANTIVALORIMULTIPLI[w]) {
                                  
        cout << "VALORE trovato!";
        cout << "\n";
        
      }                           
     
      }
    dopo un pò mi viene la simpaticissima... finestra di blocco script... di windows... ecc...


    Se commento la riga if(EVIDENZ... ecc... e la rispettiva graffa di chiusura fila via liscio tutto come l'olio...

    ma a me serve quella strameledetta riga... e non rieco a capire come possa addomesticarla...

    Grazie a tutti gli eventuali apporti in tal senso...


  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    codice:
    for (int i=0; i<MISURAVECTOR;i++) {
       
       cout << EVIDENZIAQUANTIVALORIMULTIPLI[i];
       cout << "\n";
       int w = i+1;
     
      if (EVIDENZIAQUANTIVALORIMULTIPLI[i]==EVIDENZIAQUANTIVALORIMULTIPLI[w]) {
       ....
    Dal codice che hai postato sembra che il problema sia quel EVIDENZIAQUANTIVALORIMULTIPLI[w]. All'ultima iterazione w è oltre la dimensione dell'array e quando leggi il w-esimo da errore :master:
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    sono d'accordissimo con te...

    Originariamente inviato da Alex'87
    codice:
    for (int i=0; i<MISURAVECTOR;i++) {
       
       cout << EVIDENZIAQUANTIVALORIMULTIPLI[i];
       cout << "\n";
       int w = i+1;
     
      if (EVIDENZIAQUANTIVALORIMULTIPLI[i]==EVIDENZIAQUANTIVALORIMULTIPLI[w]) {
       ....
    Dal codice che hai postato sembra che il problema sia quel EVIDENZIAQUANTIVALORIMULTIPLI[w]. All'ultima iterazione w è oltre la dimensione dell'array e quando leggi il w-esimo da errore :master:
    Ma non saprei come rimediarvi...
    Tu hai qualche idea in proposito...?

    THANKS e 'NOTTE


  7. #7
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: sono d'accordissimo con te...

    Originariamente inviato da freetom
    Ma non saprei come rimediarvi...
    Tu hai qualche idea in proposito...?


    Ragiona un attimo!

    Hai un ciclo che scorre un array. In questo ciclo confronti due elementi dell'array, l'elemento i-esimo e l'elemento w-esimo (per come hai dichiarato w stai confrontando l'i-esimo elemento con l'i+1-esimo elemento. Il tuo indice i va da 0 a MISURAVECTOR. w di conseguenza va da 1 a MISURAVECTOR + 1. All'ultima iterazione (i = MISURAVECTOR, w = MISURAVECTOR + 1) vai a confrontare l'ultimo elemento con un elemento al di fuori dell'array. È banale capire che il ciclo così come lo hai scritto te non va bene!

    Il modo più semplice per venirne fuori è far finire l'iterazione in anticipo:
    codice:
    for (int i = 0; i < MISURAVECTOR - 1; i++) {
      cout << EVIDENZIAQUANTIVALORIMULTIPLI[i] << endl;
    
      if (EVIDENZIAQUANTIVALORIMULTIPLI[i] == EVIDENZIAQUANTIVALORIMULTIPLI[i + 1]) {
        ...
      }
    }
    Ora dovrebbe essere a posto.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  8. #8
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    E' a posto è a posto!!! :-)))

    GRAZIEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EE!!!

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 © 2026 vBulletin Solutions, Inc. All rights reserved.