Strona 1 z 1

[C++] Podział stringu na wyrazy parzyste i nieparzyste

: 14 lip 2009, o 22:42
autor: Leogict
Witam.
Napisałem program z Symfonii C++ Standard, wyd. 3 z 2008r, ćwiczenie XVIII/217, w skrócie: mamy w tablicy jakiś tekst i mamy napisać funkcję rozdzielającą poszczególne wyrazy do tablicy z nieparzystymi wyrazami i parzystymi, w obu przypadkach oddzielonymi spacją.

Jak zwykle będę wdzięczny za uwagi, spostrzeżenia, komentarze i wskazówki.
Ćwiczenie było po rozdziale o tablicach, więc nie piszcie o żadnych vectorach, klasach itp

Kod: Zaznacz cały

#include <iostream>

using namespace std;

void grupuj(char zrodlo[], char parz[], char nieparz[]);
int rozmiar(char zrodlo[]);

int main()
{
	char tablica[]={"Symfonia C++ to najlepsza ksiazka na poczatek przygody z jezykiem C++ moim zdaniem"};  // dany string
	char nieparzyste[80]={};              // wstepne zerowanie
	char parzyste[80]={};                 //      -||-
	grupuj(tablica, parzyste, nieparzyste);  //here we go ;)
	cout << tablica << "
Rozmiar stringu: " << rozmiar(tablica) << "


Nieparzyste:" << endl;
	for(int i=0; i<80; i++) // wypisanie wyrazow nieparzystych
	{
		cout << nieparzyste[i];
	}
	cout << endl << "Parzyste:" << endl;
	for(int i=0; i<80; i++)  // wypisanie wyrazow parzystych
	{
		cout << parzyste[i];
	}
	cout << "


";
	return 0;
}


//*********************************************************************
// funkcja grupujaca w parzyste i nieparzyste wyrazy oddzielone spacja:
//*********************************************************************
void grupuj(char zrodlo[], char parz[], char nieparz[]) 
{
	int licznik_sp=1,indeks_nieparz=0, indeks_parz=0, size=rozmiar(zrodlo);
	for(int i=0; i<size; i++)   // petla po literach stringu
	{
		if(licznik_sp%2)   // sprawdzamy parzystosc/nieparzystosc liczby dotychczasowych spacji
		{
			nieparz[indeks_nieparz++]=zrodlo[i];
		}
		else
		{
			parz[indeks_parz++]=zrodlo[i];
		}
		if(zrodlo[i]==32) ++licznik_sp;    // spacja! nastepny wyraz! (kod ASCII spacji to 32)
	}
}

//*********************************************************************
//funkcja zwracajaca rozmiar stringu w tablicy zrodlowej:
//*********************************************************************
int rozmiar(char zrodlo[])          
{
	int rezultat=0,i=0;
	while(zrodlo[i++]) ++rezultat;    //dopoki istnieja jakies litery w danym stringu, zwiekszaj licznik
	return rezultat;
}

[C++] Podział stringu na wyrazy parzyste i nieparzyste

: 15 lip 2009, o 14:11
autor: conseil
No no no, całkiem całkiem Sam to przerabiałem jakieś 2,3 tygodnie temu, tylko że mi wyszło jakieś 10 linijek mniej. Szkoda, że tablice są przed wskaźnikami, bo gdybyś wcześniej poznał wskaźniki, to byś operował wskaźnikami, nie tablicami. Tak jest o wiele szybciej. Chociaż... Wszystkiego się dowiesz w swoim czasie

Miłej nauki

P.S Kończę 8 rozdział

[C++] Podział stringu na wyrazy parzyste i nieparzyste

: 18 lip 2009, o 10:04
autor: rotop
Nie używając wskaźników itp, można by zrobić małą poprawkę w pętlach

Kod: Zaznacz cały

 for(int i=0; i<rozmiar(nieparzyste); i++) // wypisanie wyrazow nieparzystych
   {
      cout << nieparzyste[i];
   }
   cout << endl << "Parzyste:" << endl;
   for(int i=0; i<rozmiar(parzyste); i++)  // wypisanie wyrazow parzystych
   {
      cout << parzyste[i];
   }
dzięki temu nie wypisujesz wszystkich znaków po kolei a tyle ile faktycznie jest w tablicach

[C++] Podział stringu na wyrazy parzyste i nieparzyste

: 18 lip 2009, o 12:48
autor: Leogict
Faktycznie, dzięki