[C++] Problema con le stringhe

di Anonimizzato16060 il
13 risposte
La consegna del compito è: date due stringhe, verificare quanti caratteri si ripetono nella seconda.
Io ho fatto questo:
///Date due stringhe, verificare quanti caretteri della prima stringa sono presenti nella seconda
#include <iostream>
#include <string>
using namespace std;

int main ()
{
	string a, b;
	int cont=0, la, lb;
	char ca, cb;
	cout<<"Inserisci la prima strniga: ";
	cin>>a;
	cout<<"Inserisci la seconda stringa: ";
	cin>>b;
	la=a.size();
	lb=b.size();
	for (int i=0; i<=lb-1; i++)
	{
		ca=a[i];
		cb=b[i];
		if (ca==cb)
			cont++;
	}
	
	cout<<cont;
	return 0;
}
ma è sbagliato perché ogni volta che, per esempio, metto ''amsterdam'' e ''torino'' i caratteri uguali sono 0, mentre dovrebbe darmi 1

13 Risposte

  • Il metodo che usi non è corretto ...

    Tu confronti il primo carattere della prima stringa con il primo della seconda, il secondo carattere con il secondo, il terzo con il terzo ... non mi pare che sia quello che ti hanno chiesto di fare.
  • oregon ha scritto:


    Il metodo che usi non è corretto ...

    Tu confronti il primo carattere della prima stringa con il primo della seconda, il secondo carattere con il secondo, il terzo con il terzo ... non mi pare che sia quello che ti hanno chiesto di fare.
    Dovrei fare un confronto fra la stringa, quindi la variabile a e b? E se a==b si incrementa il cont?
  • Ma se la dovessi fare con carta e penna, come faresti?

    Se trovi come fare sulla carta, allora trovi subito il programma ...
  • oregon ha scritto:


    Ma se la dovessi fare con carta e penna, come faresti?

    Se trovi come fare sulla carta, allora trovi subito il programma ...
    Su carta ho fatto così:

    (non scritto in linguaggio c++)

    inseriamo a e b
    a=amsterdam, b=torino
    hanno un carattere in comune (t)
    inserire var. di tipo char
    cb=b
    avviare ciclo che duri tanto quando lb (lb=b.size() )
    se a==b allora si incrementa cont

    Ma mi sono accorto che non si può confrontare una stringa con un char, e ho provato a mettere un altro tipo di char, ca=a[l], ma è comunque sbagliato
    E non posso usare vettori perché non li ho ancora fatti
  • Hanno 2 caratteri in comune ...

    Non hai detto nulla di diverso da come è adesso e ti ho detto che non va bene ...

    Hai calcolato la lunghezza delle due stringhe ... questo ha importanza ma perché l'hai fatto?
  • oregon ha scritto:


    Hanno 2 caratteri in comune ...

    Non hai detto nulla di diverso da come è adesso e ti ho detto che non va bene ...

    Hai calcolato la lunghezza delle due stringhe ... questo ha importanza ma perché l'hai fatto?
    L'ho fatto per far sì che il ciclo si fermi
  • Te lo chiedo diversamente ... perché hai scritto queste due linee

    la=a.size();
    lb=b.size();

    La variabile la non la usi mai ...
  • oregon ha scritto:


    Te lo chiedo diversamente ... perché hai scritto queste due linee

    la=a.size();
    lb=b.size();

    La variabile la non la usi mai ...
    perché credo dipenda tutto dalla seconda stringa
  • No ... il confronto lo devi fare tra le due stringhe e devi assolutamente tenere conto di tutte e due le lunghezze.

    Comincia a pensare di usare due for ... una dentro l'altra.
  • oregon ha scritto:


    No ... il confronto lo devi fare tra le due stringhe e devi assolutamente tenere conto di tutte e due le lunghezze.

    Comincia a pensare di usare due for ... una dentro l'altra.
    Dovrei fare il confronto facendo partire una dalla lunghezza massima e una dalla minima?
  • @FDG2801: ti stai impasticciando in un bicchiere d'acqua.
    Lascia stare il C/C++, le variabili, ecc.

    Fino a che non riesci a descrivere a parole un metodo chiaro/pulito/semplice per contare quante lettere della prima parola sono presenti nella seconda, non ne verrai fuori.

    Inizia con che cosa e' una parola: e' una sequenza / lista ordinata di lettere.
    C'e' una prima lettera, una seconda lettera, ecc.

    Ora, hai due parole. Prendi la prima lettera della prima parola ... e che ci fai?


    Nota: in questo esercizio stai utilizzando i vettori, perche' in C una stringa in realta' e' un vettore di caratteri e l'ultimo carattere, il terminatore della stringa, e' il carattere con codice ASCII 0 (zero).

    Quindi, ad esempio, se tu in C scrivi
    
    char *parola = "ciao";
    


    (nota le virgolette), il C lo converte in:
    
    char *parola = ['c', 'i', 'a', 'o', 0];
    
    La tua stringa e' di 4 caratteri, ma il C ne utilizza 5: 4 piu' uno per il terminatore.
  • migliorabile ha scritto:


    @FDG2801: ti stai impasticciando in un bicchiere d'acqua.
    Lascia stare il C/C++, le variabili, ecc.

    Fino a che non riesci a descrivere a parole un metodo chiaro/pulito/semplice per contare quante lettere della prima parola sono presenti nella seconda, non ne verrai fuori.

    Inizia con che cosa e' una parola: e' una sequenza / lista ordinata di lettere.
    C'e' una prima lettera, una seconda lettera, ecc.

    Ora, hai due parole. Prendi la prima lettera della prima parola ... e che ci fai?


    Nota: in questo esercizio stai utilizzando i vettori, perche' in C una stringa in realta' e' un vettore di caratteri e l'ultimo carattere, il terminatore della stringa, e' il carattere con codice ASCII 0 (zero).

    Quindi, ad esempio, se tu in C scrivi
    
    char *parola = "ciao";
    


    (nota le virgolette), il C lo converte in:
    
    char *parola = ['c', 'i', 'a', 'o', 0];
    
    La tua stringa e' di 4 caratteri, ma il C ne utilizza 5: 4 piu' uno per il terminatore.
    Ho ragionato un po' su e ho provato così:
     for (int i = 0; i < b.size(); ++i)
     { for (int j = 0; j < a.size(); ++j) 
    { if (b[i] == a[j]) { cont++; } } }[\code] 
    Potrebbe andare?
  • Perché non provi?
    In ogni caso, il tag finale è [/code], con la slash al contrario.
Devi accedere o registrarti per scrivere nel forum
13 risposte