Napisz program, dzielący napis na wyrazy. Napis jest ciągiem występujących naprzemiennie separatorów i wyrazów. Separatory są ciągami składającymi się z jednego, lub więcej, znaków separujących. Wyrazy to ciągi wszystkich innych znaków.
Zasady
W zadaniu należy wykorzystać wskaźniki, dlatego jedynymi dozwolonymi typami danych są char oraz char * (oraz ich tablice). Użycie w kodzie nazw innych typów jest niedozwolone. Dodatkowo, nie można korzystać z pliku nagłówkowego "string.h" ani "string".
Wejście
Na wejście podana zostanie pewna liczba par. Pary składają się z napisu i, oddzielonej spacją, listy znaków separujących, po której następuje znak nowej linii. Zarówno napis, jak i lista znaków separujących składają się z samych czarnych znaków, a długość każdego z nich nie przekracza 10000 znaków.
Wyjście
Dla każdego testu, na wyjście należy wypisać ciąg kolejnych wyrazów z napisu, rozdzielając je spacjami. Każdy test należy zakończyć znakiem nowej linii.
Przykład
Wejście:
-1- -
-1- 1
ab-c-def -=
123abc456gfed789 abcdefghijklmnopqrstuvwxyz
Wyjście:
1
ab c def
123 456 789
Oto mój kod:
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
char wyraz[10000];
char separator [10000];
char *w1,*w2;
while (cin >> wyraz >> separator)
{
for (w1=wyraz ; *w1!='\0' ; *w1++)
{
for(w2=separator; *w2!='\0'; w2++)
{
if (*w1!=*w2)
{
cout << *w1;
}
else
{
cout << " ";
}
}
}
cout << endl;
}
system("PAUSE");
return 0;
}
Ale tutaj mamy dwa mankamenty.
Pierwszy przemieszczanie się po drugim wyrazie ( separatorach) działa błędnie. Dla przykładu pierwszego i drugiego spoko, ale jak separatorów jest więcej niż jeden, to wypisuje głupoty.
Drugi, z przykładowego wyjścia z treści zadania wynika, że jeśli separator był pierwszym znakiem to ma zostać pominięty, w takim sensie że pierwszym znakiem nie może być spacja.
Mam świadomość, że to pewnie nie jest coś trudnego, ale straciłem już sporo czasu na tym, wstyd... Bardzo proszę o pomoc. Pewnie się domyśliliście po jakości kodu, ale zaznaczę, że mistrzem kodu nie jestem, więc prosiłbym proste wyjaśnienia.