[C++] Problema con le stringhe

di il
13 risposte

[C++] Problema con le stringhe

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

  • Re: [C++] Problema con le stringhe

    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.
  • Re: [C++] Problema con le stringhe

    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?
  • Re: [C++] Problema con le stringhe

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

    Se trovi come fare sulla carta, allora trovi subito il programma ...
  • Re: [C++] Problema con le stringhe

    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
  • Re: [C++] Problema con le stringhe

    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?
  • Re: [C++] Problema con le stringhe

    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
  • Re: [C++] Problema con le stringhe

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

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

    La variabile la non la usi mai ...
  • Re: [C++] Problema con le stringhe

    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
  • Re: [C++] Problema con le stringhe

    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.
  • Re: [C++] Problema con le stringhe

    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?
  • Re: [C++] Problema con le stringhe

    @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.
  • Re: [C++] Problema con le stringhe

    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?
  • Re: [C++] Problema con le stringhe

    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