DOMANDA (c++) confronto stringhe/array

Stato
Discussione chiusa ad ulteriori risposte.

MPG

Utente Attivo
544
4
Dovevo confrontare due array/stringhe e se trovavo differenze stamparli. Ho dato esempio 5 valori e fatto il programma sotto.
Vorrei capire se ci fosse da trovare gli elementi comuni e stamparli cosa dovrei fare, non riesco a farlo..
Grazie.


Codice:
#include <iostream>
using namespace std;

int main() {
     int v1[3] = {1, 5, 7,0, 8 };
   int v2[3] = {5, 3, 2, 6, 4};
   int i = 0;

   for(i=0; i<5; i++) {
      if (v1[i] != v2[i])
     {


     cout << v1[i] << "   " << v2[i] << endl;
      }
   }

   return 0;
}
[\code]
 
Ultima modifica:

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Come non riesci a farlo? != è l'operatore per vedere se due elementi son diversi, qual'è l'operatore per vedere se due elementi sono uguali?
 

MPG

Utente Attivo
544
4
Come non riesci a farlo? != è l'operatore per vedere se due elementi son diversi, qual'è l'operatore per vedere se due elementi sono uguali?

Dovrei stampare solo gli elementi uguali di 2 array , tipo se c'è 5 in entrambi (come ho messo ora) devo stampare solo quello ma per far questo non riesco a trovare il metodo.
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,222
1,853
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Devi selezionare un elemento e poi scorrere l'array per vedere se c'è un altro elemento uguale. Lo fai con 2 for.
Dovresti poi stare attento per non stampare lo stesso elemento più volte.
 
  • Mi piace
Reazioni: Andretti60

MPG

Utente Attivo
544
4
Ho pensato ad una cosa del genere usando anche rand senza mettere i valori subito come sopra, va bene cosi'?

Codice:
#include <iostream>
#include <cmath>
#include <ctime>
#include <cstdlib>

using namespace std;
int main(){

    int num1[5];
    int num2[5];
    srand(time(NULL));
    cout<<"array 1"<<endl;
    for (int i = 0; i <5; i++){
        num1[i] = rand() % 10;

        cout<<num1[i]<<endl;
    }
    cout<<"array 2"<<endl;
    for (int j = 0; j < 5; j++){
        num2[j] = rand() % 10;

        cout<<num2[j]<<endl;
    }

    cout<<"elementi comuni"<<endl;

    for (int i = 0; i <5; i++){
        for (int j = 0; j <5; j++){

                if (num1[i] == num2[j])
                    {
                cout<<" "<<num1[i];
                }
               
        }
    }
}

[\code]
 
Ultima modifica:

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,222
1,853
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Visto che gli array hanno la stessa dimensione puoi usare un solo ciclo per popolari. ;)
Per il resto mi sembra corretto.
 

MPG

Utente Attivo
544
4
Ho notato se per caso due dei numeri sono 6 e 0 nel primo array e nel secondo array tra i 5 numeri c'è due volte 0 come risultato mi esce 6 0 0 , dovrebbe venirmi invece 6 e 0 come comuni non capisco come dovrei correggere...
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,222
1,853
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Se è doppio solo nel secondo array ti è sufficiente interrompere il secondo ciclo dopo la stampa; se hai una corrispondenza è inutile andare sino al termine.
 

MPG

Utente Attivo
544
4
Beh vedi anche cosi' in allegato. In teoria bisognerebbe che il numero o i numeri che son in comune vengano stampati una volta sola...
 

Allegati

  • prova2.jpg
    prova2.jpg
    34.4 KB · Visualizzazioni: 97

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Devi in qualche modo salvarti gli elementi in comune già trovati. Ergo ci fai un bel array di lunghezza uguale al minore dei due array iniziali (qual'ora fossero diversi). Quando trovi due elementi uguali, se non c'è nel nuovo array lo aggiungi e lo stampi, sennò nisba e vai avanti
 

MPG

Utente Attivo
544
4
Devi in qualche modo salvarti gli elementi in comune già trovati. Ergo ci fai un bel array di lunghezza uguale al minore dei due array iniziali (qual'ora fossero diversi). Quando trovi due elementi uguali, se non c'è nel nuovo array lo aggiungi e lo stampi, sennò nisba e vai avanti
Scusa non ci riesco con il tuo suggerimento, puoi aiutarmi nel code per favore?
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,222
1,853
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Mostraci ciò che hai scritto sino ad ora, anche se non riesci ad implementare tutto. Così riusciamo a darti suggerimenti partendo da una base.
 

MPG

Utente Attivo
544
4
Ovviamente non è completo....

Codice:
{
    const int dim=5;
 
    int a[dim] = { 1, 5, 7, 0, 8 };
    int b[dim] = { 5, 8, 1, 1, 4 };
    int c[dim];
    int g=0;

    for (int i = 0; i< dim; i++)
    {
      for(int j=0;j<dim; j++)
        {
            if (a[i] == b[j])
            {
              cout<<a[i]<<endl;
              c[g]=a[i];
              if()

            }
        }
        }


    return 0;
}
}

[\code]
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,222
1,853
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Dovrai usare l'indice "g" (di solito si usa k, o un si da un nome appropriato) come stai già facendo, ed incrementarlo ad ogni nuovo elemento.
Concettualmente si tratta di verificare se nell'array c è presente l'elemento selezionato (a[i]) prima di stamparlo. Ogni elemento che stampi dovrà essere aggiunto a questo array; prima della stampa quindi andrai a verificare se l'elemento è presente.

Se conosci le funzioni puoi fare il controllo in un'altra funzione passando l'array e l'elemento, e poi ciclare; altrimenti hai come unica alternativa un terzo for dall'indice 0 sino all'indice g (è inutile scorrere sino a dim in questo caso, se sono presenti solo g elementi).

Non vedo altre soluzioni visto che è all'interno dei due cicli che ottieni l'elemento, e che gli elementi non sono ordinati (se fossero ordinati, anche una ricerca sarebbe più semplice... ma è un altro problema questo).
 

MPG

Utente Attivo
544
4
Sono riuscito cosi' sinceramente guardando anche in internet piu' che altro per la parte finale.
Pero' appunto non riesco bene a capire questa parte:

for (int c = 0; c < dim; c++)
{
if (v3[c])
cout << ' ' << v3[c]

Qualcuno puo' cortesemente spiegarmela?
Grazie.



Codice:
#include <iostream>
#include <cmath>
#include <ctime>
#include <cstdlib>
#include <iostream>



using namespace std;


int main()
{
    int const dim{ 5 };

    int v1[dim]{ 1, 5, 7, 10, 8 };
    int v2[dim]{ 5, 8, 22, 1, 4 };
    int v3[dim]{};


    for (int i = 0; i < dim; i++)
    {
        for (int j = 0; j< dim;  j++)
            if (v1[i] == v2[j])
            {
          
                v3[i] = v1[i];
            }
    }


cout << endl;

  for (int c = 0; c < dim; c++)
    {
        if (v3[c])
     cout << ' ' << v3[c] << " Elemento in comune nei 2 array" << endl;
    }

    return 0;
}
[\CODE]
 
Stato
Discussione chiusa ad ulteriori risposte.

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

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili