Passa al tema normale
Discussioni su argomenti di Informatica

Regole del forum

Consulta il nostro regolamento e la guida per scrivere le formule
Rispondi al messaggio

[C++] Problema con la lettura di righe

02/05/2019, 20:34

Salve vorrei capire perché il seguente codice che ho scritto da problemi:

In pratica devo fare una funzione in cui bisogna contare quante frasi ci sono in un file di testo separate da un segno di interpunzione(.?!) e poi devo visualizzare a video questi frasi una per volta.


#include <iostream>
#include <cstring>
#include <cstdlib>
#include <stdio.h>

using namespace std;
int numero_parole_e_frasi(FILE* puntatore);
int main()
{

FILE* leggi;
leggi = fopen("Nuovo documento di testo.txt","r");
const int occ=numero_parole_e_frasi(leggi);
cout<<occ;
}
int numero_parole_e_frasi(FILE* puntatore){
char datiLetti[1000];
int contatore_frasi=0;
char * pch;
while(fgets(datiLetti,1000,puntatore)!=NULL)
{pch =strpbrk(datiLetti,".!?");
while (pch != NULL)
{ contatore_frasi++;
pch = strpbrk (pch+1,".!?");
}
}
rewind(puntatore);
char** matrice;
matrice=new(char*[contatore_frasi]);
while(fgets(datiLetti,1000,puntatore)!=NULL)
{int i=0;
pch=datiLetti;
char* pch2=strpbrk(pch,".!?");
if(pch2==NULL)
{matrice[i]=pch;
cout<<matrice[i];
i++;}
else
{
while(pch2!=NULL)
{
int size=(pch2-pch);
memcpy(matrice[i],pch,size+1); //il problema è che quando faccio partire il programma l'editor mi dice che c'è un
matrice[i][size+1]='\0'; // errore di segmentation fault a questo punto
cout<<matrice[i]<<endl;
pch=pch2++;
pch2=strpbrk(pch,".!?");
i++;
}
}
}
return contatore_frasi;
}

Ho modificato il programma aggiungendo una riga

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <stdio.h>

using namespace std;
int numero_parole_e_frasi(FILE* puntatore);
int main()
{

FILE* leggi;
leggi = fopen("Nuovo documento di testo.txt","r");
const int occ=numero_parole_e_frasi(leggi);
cout<<occ;
}
int numero_parole_e_frasi(FILE* puntatore){
char datiLetti[1000];
int contatore_frasi=0;
char * pch;
while(fgets(datiLetti,1000,puntatore)!=NULL)
{pch =strpbrk(datiLetti,".!?");
while (pch != NULL)
{ contatore_frasi++;
pch = strpbrk (pch+1,".!?");
}
}
rewind(puntatore);
char** matrice;
matrice=new(char*[contatore_frasi]);
while(fgets(datiLetti,1000,puntatore)!=NULL)
{int i=0;
pch=datiLetti;
char* pch2=strpbrk(pch,".!?");
if(pch2==NULL)
{matrice[i]=pch;
cout<<matrice[i];
i++;}
else
{
while(pch2!=NULL)
{
int size=(pch2-pch);
matrice[i]=new(char[size+1]); // ma le cose non sono cambiate più di tanto
memcpy(matrice[i],pch,size+1);
matrice[i][size+1]='\0';
cout<<matrice[i]<<endl;
pch=pch2++;
pch2=strpbrk(pch,".!?");
i++;
}
}
}
return contatore_frasi;
}
Rispondi al messaggio


Skuola.net News è una testata giornalistica iscritta al Registro degli Operatori della Comunicazione.
Registrazione: n° 20792 del 23/12/2010.
©2000— Skuola Network s.r.l. Tutti i diritti riservati. — P.I. 10404470014.