Liczenie ilosci zdan w pliku tekstowym.

0

Witam mam zrobic program który liczy ilosc zdan w pliku tekstowym i przed każdym zdaniem wypisuje "zdanie #" gdzie # jest numerem zdania a potem zapisuje zmodyfikowany plik pod inna nazwą. Zrobiłam program ale liczy on zdania w pliku ale nie wiem jak zrobic aby przed każdym zdaniem wypisał mi : Zdanie#
Bardzo proszę was o pomoc.

to mój kod.

 

#include <conio.h>
#include <stdio.h>
#include <string.h>
static unsigned  long ile[26];
unsigned int zdania = 0 ;
//=============================================================================
void analiza(char* wyraz)
{          
    for(int i = 0 ; i < strlen(wyraz) ;i++)
    {
    switch(wyraz[i])                            
    {
     case '!' : case '.' : case '?' :
       ++zdania;
       break;
     case ' ' :
       break ;
     default :
       break ;
       } // switch
    } // for
}
//=============================================================================
int main()
{  int k;
   FILE * plik ;
   char nazwa[15] ;
   char bufor[80];
   printf("\n\n\tPodaj nazwe pliku :");
   scanf("%s",nazwa) ;

      if ((plik = fopen(nazwa,"r"))   // otwarcie pliku
       == NULL)                                // czy poprawne ?
   {
      fprintf(stderr, "Nie ma takiego pliku!\n");
      getch();
      return 1;
   }else{
            while( EOF != fscanf(plik,"%s",bufor))
          {
              analiza(bufor);
           
            }
         fclose(plik) ;
       
           
   printf(" ilosc zdan = %d",zdania);
      
	  getch();
    } //else
return 0 ;
}


0
  1. Wypisujesz "Zdanie <ilosc zdan="zdan">"
  2. Wczytujesz znak z pliku.
  3. Wypisujesz wczytany znak.
  4. Jeśli wczytany znak to !, . lub ? to zwiększasz <ilosc zdan="zdan"> o 1 i przechodzisz do kroku 1. Jeśli nie to przechodzisz do kroku 2.
0

nie jestem aż taka w tym dobra możesz troszkę jaśniej?

0

Można zrobić tak, że gdy wykryjesz już zdanie czyli jego koniec (?, 1, .) to zapamiętujesz tą pozycję + 1. To początek drugiego zdania. I teraz lecisz do następnego końca, mamy koniec zdania, zdania++ i na zapamiętaną pozycję wstawiasz "zdanie " + zdania. Tylko wtedy musisz zawartość pliku trzymać w string'u, a nr zdania zrzutować na string'a żeby się dało dodać do ciągu.

Jaśniej mówiąc: wczytujesz całą zawartość to string'a, albo getline'em albo tak jak teraz to robisz. Mając już zawartość, wykonujesz funkcję analiza tym samym zapamiętując pozycję ostatniego początku zdania (koniec + 1), pierwszą taką pozycją będzie 0. Przy sprawdzeniu końca zdania, wstawiasz na tą pozycję ciąg "zdanie " + zdania, ofc zdania zrzutowane na string'a lub char*. Wstawić możesz za pomocą metody insert() obiektu typu string. Poczytaj: http://www.cplusplus.com/reference/string/string/ A potem to samo itd., aż do końca wczytanej zawartości. Na końcu zapisujesz to do pliku.

0

@Ola
Blood podal konkretny prosty algorytm, ale troche go rozwine skoro nie rozumiesz ;p

Otwierasz 2 pliki, jeden jest zrodlem drugi plikiem wynikowym. Pobierasz znak ze zrodla, przerzucasz go do pliku wynikowego, a jezeli znak to !/./? dodajesz do pliku wynikowego ZDANIE X gdzie X jest zmienna zwiekszana o 1 za kazdym napotkaniem znaku !/./?.

0

Ja zrobiłam ten program w pascalu ale w C++ nie umiem nie jestem z niego dobra więc szczerze powiem proszę was o pomoc w postaci mojego zmodyfikowanego kodu... przykro mi ale nie wiem jak to zrobic

0

#include <iostream>
#include <fstream>


using namespace std;

int main()
{
	ifstream zrodlo("D:\\zrodlo.txt");
	ofstream wynik("D:\\wynik.txt");

	int ilosc_zdan=2;
	char c;
        wynik<<" ZDANIE "<<1;

	while(zrodlo.get(c))
	{
		wynik<<c;
		if(c=='.' || c=='!' || c=='?')
		{
			wynik<<" ZDANIE "<<ilosc_zdan;
			ilosc_zdan++;
		};

	}

	zrodlo.close();
	wynik.close();

	return 0;
}

 

Mimo wszystko, wydaje mi sie ze przepisanie programu na c++ nie powinno byc takim problemem.

EDIT
Kod poprawilem, nie sprawdzalem ale raczej bedzie dzialal jak trzeba.

0

Próbowała zamienic pascala na c++ ale błędy same wyskakują bo nie siedze w tym języku. Dziękuje za pomoc , i jeżeli jeszcze masz chęci mi pomóc to proszę o to aby zdanie# pisało na początku zdania a nie na końcu . Z góry wielkie dzieki.:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1