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

Leogict
Użytkownik
Użytkownik
Posty: 38
Rejestracja: 21 mar 2008, o 20:01
Płeć: Mężczyzna
Podziękował: 14 razy

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

Post 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;
}
Awatar użytkownika
conseil
Użytkownik
Użytkownik
Posty: 194
Rejestracja: 11 lip 2009, o 22:00
Płeć: Mężczyzna
Podziękował: 80 razy
Pomógł: 4 razy

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

Post 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ł
rotop
Użytkownik
Użytkownik
Posty: 24
Rejestracja: 14 lis 2007, o 17:26
Płeć: Mężczyzna
Lokalizacja: zewsząd
Podziękował: 2 razy
Pomógł: 1 raz

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

Post 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
Leogict
Użytkownik
Użytkownik
Posty: 38
Rejestracja: 21 mar 2008, o 20:01
Płeć: Mężczyzna
Podziękował: 14 razy

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

Post autor: Leogict »

Faktycznie, dzięki
ODPOWIEDZ