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

Forum dotyczące ogólnie pojętego programowania - algorytmów, struktur danych, narzędzi programistycznych, itp - głównie w kontekście komputerów PC.
ODPOWIEDZ
Awatar użytkownika
Luminofor
Użytkownik
Posty: 1373
Rejestracja: 27 lis 2007, 17:17
Lokalizacja: Polska

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

Post autor: Luminofor » 14 lip 2009, 21:28

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 << "\nRozmiar stringu: " << rozmiar(tablica) << "\n\n\nNieparzyste:" << 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 << "\n\n\n";
	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;
}

ODPOWIEDZ