[C++] Problema con la lettura di righe

Messaggioda jack ishimaura » 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;
}
jack ishimaura
Junior Member
Junior Member
 
Messaggio: 45 di 104
Iscritto il: 01/08/2017, 18:44

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite