Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 28
  1. #1

    c[++]trovare occorrenze di stringhe in1 testo

    ho trovato questo prog in un sito..ho capito cosa dovrebbe fare ma ci sono molti passaggi ke nn riesco a capire e x lo +nemmeno funziona..sapete darmi uan mano?
    grazie!!


    #include <iostream>
    #include <fstream>
    using namespace std;
    fstream file_da_leggere;
    char nome_del_file[32];

    char testo_da_esaminare[10000];

    char sequenza_da_cercare[80];

    bool trovata;

    bool sotto_sequenze(char v[], int m, char s[], int n)
    {
    for (int i=0; i <= (m-n); i++)
    {
    int j=0;
    while (s[j]==v[i] && j<n)
    {j++; i++;}
    if (j==n)
    {cout << "Stringa trovata in posizione " << i-n << '\n';
    trovata=true;}
    }
    return trovata;
    }


    int main()
    {char r;
    do
    {
    int sequenza=0, caratteri=0;
    trovata=false;
    cout << "Quale file vuoi analizzare? \n";
    cin >> nome_del_file;
    cin.get(r); // serve per “scaricare” il \n appena battuto dall'utente
    file_da_leggere.open(nome_del_file, ios::in);
    while (file_da_leggere.get(testo_da_esaminare[caratteri]) &&
    caratteri<10000) caratteri++;
    cout << "Quale sequenza di caratteri vuoi cercare? \n";
    cin>>sequenza_da_cercare;
    while (cin.get(sequenza_da_cercare[sequenza]) && sequenza_da_cercare
    [sequenza] != '\n' && sequenza < 80) sequenza++;
    if (!sotto_sequenze(testo_da_esaminare, caratteri, sequenza_da_cercare,
    sequenza))
    cout << "sequenza non trovata. \n";
    file_da_leggere.clear();
    file_da_leggere.close();
    cout << "Vuoi continuare? (y/n)";
    cin.get(r);
    }
    while(r=='y');
    return 0;
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    E' una richiesta troppo generica ... in che senso "una mano"?

    Qual e' il codice che non ti e' chiaro ?

    Hai scaricato il sorgente "a caso" da internet o ti serviva a qualche cosa ...?

  3. #3
    mi sto esercitando sul file-stream..ho trovato questo prog..solo ke compilandolo nn da errori va in esecuzione trovando occorrenze in ogni stringa..
    questa è la parte di codice ke nn capisco bene..:

    for (int i=0; i <= (m-n); i++)
    {
    int j=0;
    while (s[j]==v[i] && j<n)
    {j++; i++;}
    if (j==n)
    {cout << "Stringa trovata in posizione " << i-n << '\n';
    trovata=true;}
    }
    return trovata;

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Prima di tutto, devi scrivere il codice correttamente indentato in modo che sia leggibile ...

    Poi esamina riga per riga, tenendo sempre presente quando sei all'interno di un blocco (che sia un blocco if o un while o un for) ...

    Ci provi?

    codice:
    for (int i=0; i <= (m-n); i++)
    {
      int j=0;
    
      while (s[j]==v[i] && j<n)
      {
        j++; 
        i++;
      }
    
      if (j==n)
      {
        cout << "Stringa trovata in posizione " << i-n << '\n';
        trovata=true;
      }
    }
    
    return trovata;

  5. #5
    lho fatto solo ke nn lo capisco uguale..e gia il fatto ke nn funzioni significa ke cè qualcosa ke nn va..ma cosa?

  6. #6
    ho trovato l'errore..:

    int main()
    {char r;
    do
    {
    int sequenza=0, caratteri=0;
    trovata=false;
    cout << "Quale file vuoi analizzare? \n";
    cin >> nome_del_file;
    cin.get(r); // serve per “scaricare” il \n appena battuto dall'utente
    file_da_leggere.open(nome_del_file, ios::in);
    while (file_da_leggere.get(testo_da_esaminare[caratteri]) &&
    caratteri<10000) caratteri++;
    cout << "Quale sequenza di caratteri vuoi cercare? \n";
    cin>>sequenza_da_cercare;
    while (cin.get(sequenza_da_cercare[sequenza]) && sequenza_da_cercare
    [sequenza] != '\n' && sequenza < 80) sequenza++;


    cin>>nome_del_file// nn serve a nulla..

    ora il programma funziona ma mi sapete spiegare come funziona la funzione "BOOL SOTTO SEQUENZE"?

    bool sotto_sequenze(char v[], int m, char s[], int n)
    {
    for (int i=0; i <= (m-n); i++)
    {
    int j=0;

    while (s[j]==v[i] && j<n)
    {
    j++;
    i++;
    }

    if (j==n)
    {
    cout << "Stringa trovata in posizione " << i-n << '\n';
    trovata=true;
    }
    }

    return trovata;
    }

  7. #7
    Utente di HTML.it L'avatar di byaur
    Registrato dal
    Aug 2004
    Messaggi
    1,061
    se riesci a scrivere correttamente il codice è meglio...

    indenta...indenta...indenta...indenta...indenta... indenta.......

    VVoVe: VVoVe: VVoVe:
    Chi di noi non vorrebbe
    sollevare il velo sotto cui sta nascosto il
    futuro...
    David Hilbert

  8. #8
    codice:
    #include <iostream>
    #include <fstream>
    using namespace std;
    fstream file_da_leggere;
    char nome_del_file[32];
    
    char testo_da_esaminare[10000];
    
    char sequenza_da_cercare[80];
    
    bool trovata;
    
    bool sotto_sequenze(char v[], int m, char s[], int n) 
    {
        for (int i=0; i <= (m-n); i++)
        {
           int j=0;
           while (s[j]==v[i] && j<n)
           {
              j++;
              i++;
           }
        if (j==n)
        {
          cout << "Stringa trovata in posizione " << i-n <<'\n';
          trovata=true;}
        }
        return trovata;
    }
    
    
    int main()
    {
    char r;
    do
    {
      int sequenza=0, caratteri=0;
      trovata=false;
      cout << "Quale file vuoi analizzare? \n";
      cin >> nome_del_file;
      cin.get(r);
      file_da_leggere.open(nome_del_file, ios::in);
      while(file_da_leggere.get(testo_da_esaminare[caratteri])&&caratteri<10000)
        caratteri++; 
      cout << "Quale sequenza di caratteri vuoi cercare? \n";
      while(cin.get(sequenza_da_cercare[sequenza])&&sequenza_da_cercare[sequenza]!='\n'&& sequenza<80)
        sequenza++;
     if(!sotto_sequenze(testo_da_esaminare,caratteri,sequenza_da_cercare,sequenza))
       cout << "sequenza non trovata. \n";
       file_da_leggere.clear();
       file_da_leggere.close();
       cout << "Vuoi continuare? (y/n)";
       cin.get(r);
    }
    while(r=='y');
    return 0;
    }

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Hai scritto male la funzione, manca una parentesi } ... ma quello che fa, a grandi linee e'

    1) accetta due stringhe e relative lunghezze

    2) comincia a cercare la seconda stringa all'interno della prima, carattere per carattere

    3) se dopo il confronto, tutta la stringa da cercare e' stata trovata nella prima, restituisce true

    4) altrimenti dovrebbe restituire false (ma questa parte manca)

  10. #10
    1) accetta due stringhe e relative lunghezze

    2) comincia a cercare la seconda stringa all'interno della prima, carattere per carattere

    3) se dopo il confronto, tutta la stringa da cercare e' stata trovata nella prima, restituisce true

    4) altrimenti dovrebbe restituire false (ma questa parte manca)


    1)ok
    2)dove è ke cerca carattere x carattere?
    3)sarebbe if(j==n)?
    4)nn serve xke se il valore nn è true torna false con:
    codice:
     if(!sotto_sequenze(testo_da_esaminare,caratteri,sequenza_da_cercare,sequenza))
       cout << "sequenza non trovata. \n";

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.