Piccolo dubbio sul ciclo while

di il
2 risposte

Piccolo dubbio sul ciclo while

Buongiorno a tutti,
sto svolgendo un esercizio che riguarda la lettura di un file di testo (esportato da Excel in formato CSV), la ricerca di una stringa dentro quest'ultimo ed il conteggio di quante volte la suddetta stringa appare.
Il codice che ho realizzato funziona, ma mi sorge una curiosità. Se sposto l'inizializzazione della variabile "posizione", ponendola all'inizio del codice e fuori dai cicli, l'esecuzione cambia radicalmente restituendo un risultato errato.
Da cosa può dipendere? Perché è necessario che quella variabile venga inizializzata proprio lì?
Allego il codice e ringrazio chiunque sia così disponibile da aiutarmi.
Un caro saluto

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
ifstream f("Orario.csv");

int ore = 0;
string nome = "Chiari";
string riga = "";

if (f)
{

while (getline(f, riga))
{
    int posizione = 0;

    while ((posizione = riga.find(nome, posizione)) != string::npos)
    {
        posizione++;
        ore++;
        cout<<posizione<<endl;
    }
}

cout<<ore<<endl;

f.close(); f.clear();

}
else
    cout<<"File non letto"<<endl;

return 0;
}

2 Risposte

  • Re: Piccolo dubbio sul ciclo while

    Semplicemente perché se la inizializzi all'esterno del corpo del primo ciclo, a ogni nuova riga di testo la tua variabile posizione continua il conteggio dal suo ultimo valore ricevuto. Invece, quando tu chiami il ciclo:
    while ((posizione = riga.find(nome, posizione)) != string::npos)
    la variabile posizione deve essere impostata a zero, anche se è stata dichiarata in un ambito di visibilità più esterno.
    Consiglio di ripassare le regole di visibilità.
  • Re: Piccolo dubbio sul ciclo while

    Ti ringrazio infinitamente!
Devi accedere o registrarti per scrivere nel forum
2 risposte