Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: [C++] array e stringhe

  1. #1
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635

    array e stringhe

    Ciao a tutti! Devo scrivere un programma in C++ che consideri due stringhe di testo e conti quante volte i caratteri della seconda sono presenti nella prima. Ho provato a usare gli array e a scrivere questo

    codice:
    #include <iostream>
    #include <stdlib.h>
    #include <string>
    using namespace std;
    
    int main () {
        int i , j , repeat;
        char p[10] , q[10];
        cout<<"Inserire il primo testo: ";
        cin>>p;
        cout<<"Inserire il secondo testo: ";
        cin>>q;
        for (i = 0 ; i < 10 ; ++i) {
            for (j = 0 ; j < 10 ; ++j) {
                while (p[i] == q[j]) {
                    ++repeat;
                }
            }
        }
        cout<<repeat;
    }
    ma non funziona (dà dei risultati assurdi)...sapete aiutarmi? Grazie a tutti!

  2. #2
    Utente di HTML.it L'avatar di ShaleN
    Registrato dal
    Aug 2010
    Messaggi
    517
    Ciao.
    Prova a fare così:

    codice:
    for (i = 0 ; i < 10 ; ++i) {
    for (j = 0 ; j < 10 ; ++j) {
    if (p[i] == q[j]) {
    ++repeat;
    }
    }
    }
    Le vie del Signore sono infinite. È la segnaletica che lascia a desiderare.
    La luce viaggia più veloce del suono. Per questo alcune persone sembrano brillanti finchè non parlano.
    Occhio per occhio uguale... occhio al quadrato

  3. #3
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    grazie ma anche così continua a non funzionare
    nessuna altra idea? Grazie!

  4. #4
    Utente di HTML.it L'avatar di ShaleN
    Registrato dal
    Aug 2010
    Messaggi
    517
    Premetto che non ne so molto di C++, ma non si dovrebbe scrivere i++ al posto di ++i ?

    EDIT:

    Prova ad azzerare Repeat prima del ciclo for
    Le vie del Signore sono infinite. È la segnaletica che lascia a desiderare.
    La luce viaggia più veloce del suono. Per questo alcune persone sembrano brillanti finchè non parlano.
    Occhio per occhio uguale... occhio al quadrato

  5. #5
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    niente neanche così...sto diventando matto!

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Moderazione

    Prendi visione del Regolamento interno. In particolar modo alle modalità di esposizione delle domande, dei titoli delle discussioni, dell'indicazione del linguaggio (obbligatoria) e dell'uso degli appositit ag CODE per il codice.

    Questa discussione la sistemo io, ove possibile.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    grazie delle indicazioni. comunque il mio problema l'ho già risolto.

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Originariamente inviato da minomic
    grazie delle indicazioni. comunque il mio problema l'ho già risolto.
    E allora, per completezza, dovresti riportare la soluzione.
    Il forum serve soprattutto a cercare soluzioni a problemi già affrontati.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    8
    codice corretto:

    codice:
    #include <iostream>
    #include <stdlib.h>
    #include <string>
    
    using namespace std;
    
    int main () {
        int i , j , repeat = 0;
        char p[10] , q[10];
        cout<<"Inserire il primo testo: "; p[0] = '\0';
        cin>>p;
        cout<<"Inserire il secondo testo: "; q[0] = '\0';
        cin>>q;
        for (i = 0 ; i < strlen(p) ; i++) {
            for (j = 0 ; j < strlen(q) ; j++) {
                if (p[i] == q[j]) {
                    repeat++;
                }
            }
        }
        cout<< "Numero occorrenze: " << repeat;
    }
    errori:

    1) stringhe non inizializzate
    2) repeat non inizializzato, errore ancora più grave del primo. il "repeat" iniziava da un numero casuale.
    3) nessun controllo sulla lunghezza delle stringhe. se introduci meno di 9 caratteri per le stringhe i due cicli continuano comunque a confrontare tra di loro le locazioni di memoria fino a i=9 e j=9.
    4) il ciclo while va in loop infinito non appena si ha la situazione p[i] == q[j].

    le notazioni postfisse mi piacciono di più

    ciao

  10. #10
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    sì... io alla fine ho fatto così
    codice:
    #include <iostream>
    #include <stdlib.h>
    #include <string.h>
    using namespace std;
    
    int main () {
        int i , j , repeat = 0;
        cout<<"Inserire il primo testo: ";
        string p; getline (cin, p);
        cout<<"Inserire il secondo testo: ";
        string q; getline (cin , q);
    
        for (i = 0 ; i < p.size() ; ++i)    // scansiono le due stringhe con due contatori i e j
       {
            for (j = 0 ; j < q.size() ; ++j)
          {
                if (p[i] == q[j])
             {
                    ++repeat;
                }
            }
        }
        cout<<"Il numero di ripetizioni fra le due stringhe e' " << repeat << endl;
        system ("PAUSE");
       return 0;
    }
    ma alla fine il principio è lo stesso.

    Ciao a tutti

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